1.2 .NET的平台无关性

在1.1节中提到了“平台无关性”这个特性,知道了.NET应用程序并不直接依赖操作系统,而是依赖中间层——.NET框架而实现的,如图1-2所示。我们都知道,Java的跨平台特性是靠虚拟机实现的,虚拟机就像一台虚拟的电脑,它负责与具体的操作系统、硬件设备打交道,.NET程序和Java程序采用的方式类似,操作系统和硬件设备对它们来讲是透明的,它们被虚拟机加载、编译、运行和卸载。因此,只需要为不同的操作系统和硬件设备开发相应的虚拟机(对于.NET来说是.NET运行时,对于Java来说是JVM[1])。要了解.NET是如何实现的,就需要了解一个新概念:通用语言基础架构(Common Language Infrastructure,CLI),CLI是微软联合惠普等巨头于2000年向ECMA[2]提交的技术规范,该规范是开放的。CLI定义于.NET框架的一个子集,它规定了如何在运行库中声明、使用和管理类型,同时也是运行库支持跨语言互操作的一个重要组成部分。CLI要达到的目的如下:

❑建立一个支持跨语言集成、类型安全和高性能代码执行的框架。

❑提供一个支持完整实现多种编程语言的面向对象的模型。

❑定义各语言必须遵守的规则,有助于确保用不同语言编写的对象能够交互作用。

CLR是CLI这一规范的一种实现,前面提到的Mono和Portable.NET是另外两种实现,它们的关系如图1-4所示。

1.2 .NET的平台无关性 - 图1

图 1-4 通用语言基础架构

[1]JVM(Java Virtual Machine),亦即Java虚拟机。

[2]是一个技术标准制定的协会,前身为欧洲计算机制造商协会(European Computer Manufacturers Association)。