一、CIL(Common Intermediate Language)----公共中间语言
1.1 公共
因为不论C#语音也好,VB.NET语言也好,C++/CLI语言也好,甚至是重新开发一套以自己名字缩写命名的语言,只要他期望运行的目标平台是.net,在经过相应的编译器编译之后,所生成的程序集就是由CIL语言代码描述的。
1.2 中间
因为这种语言只是比我们使用的高级语言,比如C#低一级,并不是CPU刻意直接执行的本地机器语言。这种语言还需要.NET运行时环境的支持,在执行之前,进行一个just-in-time(即时)的二次编译过程,才能转变成计算机可以识别的指令。
1.3 语言
CIL不过是一种程序语言,相对于C#来说,它是一种更低级的语言。他是一种面向对象的语言。
由于程序集是由CIL语言所描述的,因此CIL也叫作程序集语言,又因为.NET程序集需要由.NET运行时加载才能运行,可以视其为.NET运行时进行管理的,所以CIL代码也叫作托管代码。相对的,不需要.NET运行时就可以执行的代码就叫做非托管代码。
二、BCL(Base Class Library)----基类库
这个类库中包含的都是些最基本的类型,其本身已经和CIL语言融为一体了,为CIL语言提供基础的编程支持。
string在Visula Studio中以深蓝色呈现,属于C#关键字,他是BCL中System.String类型的一个别名。这些由编译器直接支持,将语言本身的关键字类型转换为CIL类型的,就叫做基元类型。比如byte、int、string都是基元类型。
三、FCL(Framework Class Library)----框架类库
BCL是FCL的一个子集。BCL中包含了与编译器及CIL语言关系紧密的核心类型,以及常见开发任务中都会使用到的类型。
从功能上可以分为以下几层:
- 最内一层,由BCL的大部分组成,主要作用是对.NET框架、.NET运行时及CIL语言本身进行支持,例如基元类型、集合类型、线程处理、应用程序域、运行时、安全性、互操作等。
- 中间一层,包含了对操作系统功能的封装,例如文件系统、网络连接、图形图像、XML操作等。
- 最外一层,包含各种类型的应用程序,例如Windows Form、Asp.NET、WPF、WCF、WF等
四、CTS(Common Type System)----公共类型系统
要开发一套新语言,实际要做什么并不是由新语言决定的,而是由CIL来决定的。因此,需要一套CIL的定义、规则或标准。这套规则定义了我们的语言可以做什么,不可以做什么,具有哪些特性。这套规则就成为CTS。任何满足了这套规则的高级语言就可以成为面向.NET框架的语言。C#和VB.NET不过是微软自己开发了一套符合CTS的语言。
CTS规定了可以在语言中定义诸如类、结构、委托等类型。规范了类型中可以包含字段、属性、方法、事件。规定了各种访问性。定义了一些约束。
由于CIL是.NET运行时所能理解的语言,因此他实现了CTS的全部功能。虽然他是一种低级语言,但是实际上,他所具有的功能更加完整。
五、CLS(Common Language Specification)----公共语言规范
CLS是CTS的一个子集,定义了一些常见的、大多数语言都共有的语言特性。
六、CLR(Common Language Runtime)----公共语言运行时
CLR是一个软件层活代理,他管理了.NET程序集的执行,主要包括管理应用程序域、加载和运行程序集、安全检查、将CIL代码即时编译为机器代码、一场处理、对象析构和垃圾回收等。相对于编译时,这些过程发生在程序运行的过程中。