语言互用性概述

更新:2007 年 11 月

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

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

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

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

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

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

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

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

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

请参见

概念

公共语言规范

编写符合 CLS 的代码

其他资源

.NET Framework 概述

通用类型系统

元数据和自描述组件