跨语言互操作性

本节介绍公共语言运行时内置的语言互操作性支持并说明公共语言规范 (CLS) 在保证跨语言互操作性方面所发挥的作用。

语言互操作性是一种代码与使用其他编程语言编写的另一种代码进行交互的能力。 语言互操作性可以有助于最大程度地提高代码的重复使用率,提高开发过程的效率。

因为开发人员使用多种工具和技术,而每一种工具和技术都支持不同的功能和类型,这就形成了确保语言互操作性较为困难的历史根源。 但是,面向公共语言运行时的语言编译器和工具却受益于运行时的内置语言互操作性支持。

公共语言运行时通过指定和强制通用类型系统以及提供元数据为语言互操作性提供了必要的基础。 因为所有面向运行时的语言都遵循通用类型系统规则来定义和使用类型,类型的用法在各种语言之间是一致的。 元数据通过定义统一的存储和检索类型信息的机制使语言互操作性成为可能。 编译器将类型信息存储为元数据,公共语言运行时使用该信息在执行过程中提供服务;因为所有类型信息都以相同的方式存储和检索,而与编写该代码的语言无关,所以运行时可以管理多语言应用程序的执行。

托管代码受益于运行时的语言互操作性支持表现在以下几个方面:

  • 类型可以从其他类型继承实现,将对象传递到另一个类型的方法,以及调用对其他类型定义的方法,而不管该类型是在哪种语言中实现的。

  • 调试器、探查器或其他工具只需理解一种环境语言就可以支持面向运行时的任何编程语言,这种环境语言就是:公共语言运行时的 Microsoft 中间语言 (MSIL) 和元数据。

  • 多种语言间异常处理是一致的。 您的代码可以以一种语言引发异常,该异常可以被用另一种语言编写的对象捕获并理解。

即便运行时向所有托管代码提供在多语言环境中执行的支持,仍无法保证您创建的类型的功能可以被其他开发人员使用的编程语言完全利用。 这主要因为面向运行时的每种语言编译器都使用类型系统和元数据来支持其自己独有的一组语言功能。 在不了解调用代码将用何种语言编写的情况下,您将不太可能知道调用方是否可以访问您的组件公开的功能。 例如,如果您选用的语言支持无符号整数,您可能使用 UInt32 类型的参数设计方法;但在不识别无符号整数的语言中,该方法可能无法使用。 但是,不具有无符号整数概念的语言将无法使用该方法。

为了确保使用其他编程语言的开发人员都可以访问您的托管代码,.NET Framework 提供了公共语言规范 (CLS),它描述了一组基本的语言功能并定义了如何使用这些功能的规则。 有关组件和工具中 CLS 遵从性的更多信息,请参见 编写符合 CLS 的代码

相关主题

标题

说明

公共语言规范

说明存在一组所有语言共有功能的必要性并确定 CLS 规则和功能。

编写符合 CLS 的代码

讨论组件 CLS 遵从性的意义并确定工具 CLS 遵从性的级别。

通用类型系统

描述公共语言运行时如何声明、使用和管理类型。

元数据和自描述组件

说明公共语言运行时描述类型并将描述信息存储于类型本身的机制。