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


发布评论