Mcrosoft中间语言的主要特征

Mcrosoft中间语言显然在.NET FrameWork中起着非常重要的作用。现在讨论一下IL(Intermideate Language)的主要特征。因为面向.NET的所有语言在逻辑上都需要支持IL的主要特征。

下面是中间语言IL的主要特征:

  • 面向对象和使用接口
  • 值类型和引用类型之间的显著差异
  • 强类型数据化
  • 使用异常来处理错误
  • 使用特性(arrtribute)

1、面向对象和接口的支持

.NET的语言无关性还有一些实际的限制。中间语言在设计时就打算实现某些特殊的编程方法,这表示面对它的余元必须与编程方法兼容,Microsoft为IL选择的特定道路是传统的面向对象的编程,带有类的单一继承性。

除了传统的面向对象编程外,中间语言还引入了接口的概念,在带有COM的Windows下第一次实现了接口。用.NET建立的接口与COM接口不同,他们不需要支持任何COM基础结构。例如,它们不是派生自IUnknown,也没有对应的GUID。但它们与COM接口共享下述理念:提供一个契约,实现给定接口的类必须提供该接口指定的方法和属性的实现方式。

2、不同的值类型和引用类型

与其他的编程语言一样,中间语言提供了许多预定义的基本数据类型。它的一个特性是值类型和引用类型之间有明显的区别。对于值类型(value type)变量直接存储其数据,而对于引用类型(reference type)变量仅存储地址,对应的数据可以在该地址中找到。

在C++中,使用引用类型类似于通过指针来访问变量,而在Visual Basic中,与引用类型最相似的是对象,Visual Basic 6总是通过引用来访问对象。中间语言也有数据存储的规范:引用类型的实例总是存储在一个名为“托管堆”的内存区域中,值类型一般存储在堆栈中(但如果值类型在引用类型中声明为字段,他们就内联存储在堆中)。

3、强类型数据化

中间语言的一个重要方面是它基于数据类型化。所有的变量都清晰地标记为属于某个特定数据类型。特别是中间语言一般不允许对模糊的数据类型执行任何操作。C++开发人员习惯于在不同类型之间转换指针类型。执行这类操作将极大的提高性能,但破坏了类型的安全性。

尽管强迫实现类型的安全性似乎会降低性能,但在许多情况下,我们从.NEt提供的、依赖于类型安全的服务中获得的好处更多。这些服务包括:

  • 语言的互操作性
  • 垃圾收集
  • 安全性
  • 应用程序域
  1. 语言互操作性中强数据类型化的重要性

如果类派生自其他类,或包含其他类的实例,它就需要知道其他类使用的所有数据类型,这就是强数据类型化非常重要的原因。实际上,过去由于缺少用于指定这类信息的系统,从而成为语言继承和交互操作的真正障碍。

 通用类型系统(Common Type System)

此类数据类型问题在.NET中使用通用类型系统得到了解决。CTS定义了可以在中间语言中使用的预定义数据类型们所有面向.NET FrameWork的语言都可以生产最终基于这些类型的编译代码。

CTS不仅指定了基本数据类型,还定义了一个内容丰富的类型层次结构,其中包含设计合理的位置,在这些位置上,代码允许定义它自己的类型。CTS的层次结构反映了中间语言的单一继承的面向对象的方法,如下图所示。

公共语言规范(CLS)
公共语言规范(Comom Language Specification,CLS)和通用类型系统一起确保语言的互操作性。CLS是一个最低标准集,所有面向.NET的编译器都必须支持它。因为IL是一种内涵非常丰富的语言,大多数编译器的编写人员有可能把给定编译器的功能限制为只支持IL和CTS提供的一部分功能。 只要编译器支持已在CLS中定义的内容,这就很不错。

4、通过异常处理错误

.NET提供了一种基础结构,让 面 向.NET的 编译器支持异常处理。特别是它提供了一组.NET类来表示异常,语言的互操作性则允许异常处理代码解释被抛出的异常对象,无论异常处理代码使用什么语言编写,都是这样。 语言的无关性没有体现在 C++和 Java的异常处理中,但在COM的错误处理机制中有一定限度的体现 。

5、特性的使用

.NET支持特性。在.NET中,对特性的革新是可以在源代码中定义自己的自定义特性。这些用户定义的特性将和对应数据类型或方法的元数据放在一起,这对于文档记录十分有效,它们和反射技术一起使用以根据特性执行编程任务。另外,与.NET的语言无关性的基本原理一样,特性也可以在一种语言的源代码中定义,而被用另一种语言编写的代码读取。

原文地址:https://www.cnblogs.com/iloney/p/4143089.html