回忆过去,VC++生成的文件,经过预编译、编译、汇编、链接几个步骤之后,生成可执行的本地代码。
1、C#源程序执行过程
源程序编译为程序集的过程:C#源程序 -> C#编译器 -> 程序集(CIL代码)-> JIT二次编译(.NET Runtime环境支持)-> 本机可以识别的指令
上面的CIL(Common Intermediate Language)不是本机可以直接执行的指令,需要后续的处理。CIL是一种基于堆栈的语言,也是一种面向对象的语言。
2.BCL基类库
BCL(Base Class Library)包含最基本的类库,BCL已经成为CIL的一部分了,所有面向CIL的语言都可以使用BCL。
3.FCL框架类库
FCL(Framework Class Library)内容极多,包含三层。
最内一层:大部分由BCL组成,对.NET框架、.NET运行时、CIL语言本身进行支持,例如:基元类型、集合类型、线程处理、网络连接、运行时、安全等
中间一层:对操作系统的封装,包括:文件系统、网络连接、图形图像、XML操作等。
最外一层:对各种应用程序的支持,例如:Windows Forms、ASP.NET、 WPF、 WCF等。、
4.CTS公共类型系统
任何满足了 CTS(Common Type System)的高级语言,就叫做面向.NET框架的语言。CTS规定了类类型、枚举类型、字段、属性、方法等,显然CIL实现了CTS的全部功能,C#只实现了CTS的一部分功能,比如:C#没有全局变量。简言之:CTS是一套语言的规范定义。
5.CLR公共语言运行时
CLR(Common Language Runtime)为.NET框架的核心部分。程序集主要由以下几个部分组成:
CLR是.NET程序集的一个运行环境,类似Java虚拟机,管理了程序集的运行,包括:管理应用程序域、加载和运行程序集、安全检查、将CIL代码编译为机器代码、异常处理、对象析构和垃圾回收。