1.2 .NET的体系结构
在.NET的整个结构中,包括虚拟执行系统、类型系统、元数据和公用语言规范4个组成部分。笔者建议初学者好好领会这一节的内容,虽然比较抽象难懂,但学习好它们对于掌握C#语言的本质有很大的帮助。在本节中,将分别对它们进行简要地介绍。.NET的结构如图1.4所示。
图1.4 .NET的结构
1.2.1 虚拟执行系统VES
虚拟执行系统,简称VES。它是.NET环境中应用程序运行的基础。其主要作用有:驱动.NET运行环境;元数据的生成和使用;公用语言规范的满足条件检查,以及应用程序执行过程中的内存管理等。可以把它想象成一台虚拟的计算机,只不过这台计算机的硬件是软模拟的。
提示:在.NET环境中的虚拟执行系统和Java体系中的虚拟机基本是一个概念,但是两者内部实现有所差异。Sun公司一直在宣扬Java语言是跨平台的,其实.NET平台也可以跨平台,只要有能运行在Linux系统上的虚拟执行系统,那么用.NET中的公共语言编写的程序同样可以在Linux系统上运行。目前,Microsoft公司并没有发行这种官方版本的虚拟执行系统,但是有一些开源组织已经写出了能运行在Linux系统上的虚拟执行系统。
1.2.2 元数据
元数据是一种二进制信息,用来存储公共语言环境中的可执行文件,在术语中称为PE文件。当编写一个程序时,通过利用类型声明,所声明的类型被介绍给时间运行环境,它用来管理代码的执行,目的是使程序设计更为简便。类型声明在于PE可执行文件内部描述。元数据和可执行代码并存的主要优势是:
· 信息和类型自身放在一起,不会遍布很多地方。
· 有助于解决COM中的版本问题。
· 在相同的上下文中使用不同的版本库,因为库不仅被注册表引用,也被包含在可执行代码中的元数据引用。
1.2.3 通用语言规范CLS
通用语言规范,简称CLS。在.NET中,如果用C#语言写了一个遵守CLS规则的类,其他编程语言如果也遵守该规则,那么用其他编程语言就可以调用C#语言编写的类。CLS最大的好处就是带来了语言的交互可操作性。
提示:在CLS规则下,用C#语言写一个组件,在VB.NET语言中派生它,在C#中再次从VB.NET类派生它。只要所有的外部可访问项遵守CLS规则,这都是允许的。
1.2.4 类型系统CTS
通用类型系统简称CTS。它提供丰富的类型系统,同时支持面向对象和过程编程语言。它的功能在于实现很多种近似但有点不兼容的类型互相兼容。例如整型数据,在VB.NET中,它的长度是16位,而在C++和C#语言中,它的长度是32位。这样的情况在日期和时间及数据库方面的数据类型中很常见。这种不兼容问题使应用程序的创建和维护更加复杂化,尤其是当在一个程序中使用了多种编程语言时。
另一个问题是,因为编程语言之间存在着一些差别,不能在一种语言中重用另一种语言创建的类型。除非采用COM用二进制标准接口部分地解决这个问题,因为编译成的二进制数据都是相同的,计算机最终执行的数据也是二进制形式。有了VOS后,用C#写的文件就可以在VB.NET里调用了。