2024年3月20日发(作者:)

概述

.NET Framework的核心是其运行库的执行环境,称为公共语言运行库(CLR)

或.NET运行库。通常将在CLR的控制下运行的代码称为托管代码(managed code)。

但是,在CLR执行编写好的源代码之前,需要编译它们(在C#中或其它语

言中)。在.NET中,编译分为两个阶段:

1、把源代码编译为Microsoft中间语言(IL)。

2、CLR把IL编译为平台专用的代码。

这个两阶段的编译过程非常重要,因为Microsoft中间语言(托管代码)

是提供.NET的许多优点的关键.

NET平台的整体结构:

.NET Framework是架构在Windows平台上的一个虚拟的运行平台,你可以

想象将最下层Windows换做其他的操作系统,例如说Linux, 一样可以实现使用

符合CLS(Common Language Specification, 通用语言规范)的.NET语言(、

C#、等)来创建或Windows Form(可能会叫Linux Forms)

应用程序的功能,这其实就是Mono计划要实现的功能。所以可以这么认为,理

论上,C#是一种可以跨平台的语言,这很象Java。

C#另一个比较象Java的地方是,它也是一种(特殊意义上的)语言,同

Java一样,C#编写的程序代码也是先通过C#编译器编译为一种特殊的字节代码

(Microsoft Intermediate Language, MSIL,微软中间语言),运行时再经由

特定的编译器(JIT编译器)编译为机器代码,以供操作系统执行。

不仅是C#语言,所有.NET语言(将会包括我们常用的几十种现代的编码语

言)都可以编写面向CLR的程序代码,这种代码在.NET中被称为托管代码

(Managed Code),所有的Managed Code都直接运行在CLR上,具有与平台无关

的特性。

解释性的语言很安全,并且可以通过他的运行平台为其赋予更多的功能,

例如自动内存管理,异常处理等。

CLR结构图

C#所具有的许多特点都是由CLR提供的,如类型安全(Type Checker)、垃

圾回收(Garbage Collector)、异常处理(Exception Manager)、向下兼容(COM

Marshaler)等,具体的说,.NET上的CLR为开发者提供如下的服务:

1、平台无关: CLR实际上是提供了一项使用了虚拟机技术的产品,它构

架在操作系统之上,并不要求程序的运行平台是 Windows系统,只要是能够支

持它的运行库的系统,都可以在上面运行.NET应用。所以,一个完全由托管代

码组成的应用程序,只要编译一次,就可以在任何支持.NET的平台上运行。

2、跨语言集成: CLR允许以任何语言进行开发,用这些语言开发的代码,

可以在CLR环境下紧密无缝的进行交叉调用,例如,可以用VB声明一个基类对

象,然后在C#代码中直接创建次基类的派生类。

3、自动内存管理: CLR提供了垃圾收集机制,可以自动管理内存。当对象

或变量的生命周期结速后,CLR会自动释放他们所占用的内存.

4、跨语言应用

当编程人员在用自己喜欢的编程语言写源代码的时候, 这个源代码在被转

化成媒介语言(IL)之前,先被编译成了一个独立的可执行单元(PE)。这样无

论你是一个程序员,或一个C#程序员,甚至是使用托管的C++的程序员。

只要被编译成IL就是同等的。 首先,编译输出的exe是一个由中间语言(IL),

元数据(Metadata)和一个额外的被编译器添加的目标平台的标准可执行文件头

(比如Win32平台就是加了一个标准Win32可执行文件头)组成的PE(portable