『好好学习,天天向上。』—— 毛主席语录
.NET Framework的组成
.NET Framework 是由微软公司推出的一种完全面向对象的软件开发平台,它主要由两个组件构成,分别为公共语言运行库(CLR)和.NET Framework类库,如下图:
公共语言运行库是.NET Framework 的基础。用户可以将运行库看做一个执行时的管理环境,它提供内存管理、线程管理和远程处理等核心服务。通常在CLR中运行的代码称为托管代码(Managed Code),它主要有两个作用:
(1)与操作系统进行交互,让用户的程序可以在操作系统里执行响应。
(2)统一数据类型和统一语言语法,原因是.NET框架上有不止C#一种语言,其中还包括VC++,VC.NET等,这些语言编写的程序其实最后都会在公共语言运行库这边翻译成统一的语言(这就是中间语言IL),然后与操作系统进行相关的交互。
.NET Framework的另一个主要组件是类库,它是一个综合性的面向对象的可重用类型集合,用户可以使用它开发多种应用程序,这些应用程序包括传统的命令行或图形用户界面(GUI)应用程序,也包括基于ASP.NET所提供的最新创新的应用程序,如Web Forms、XML和Web Services等。
C#和.NET Framework
每一种编程语言,要想执行,就必须要转换为目标操作系统能够理解的语言才能执行,这种语言叫做本机代码。C#也是一样的,也要做这样的转换,但是它不是一步到位的,在.NET Framework这个平台下,该过程分为一下两个阶段。
1、编译
在编译C#代码时,并不是立即创建本地代码,而是通过C#编译器把代码编译为通用中间语言(Common Intermediate Language,CIL)代码,也就是IL代码,并将其存储在一个程序集中。
注意:在C#中,程序集分为两种,扩展名为.exe的可执行文件和扩展名为.dll的可供其他程序调用的库文件。
2、执行
执行C#程序时,程序集将加载到CLR中。要使代码能够在目标操作系统上运行,还需要进一步把CIL代码转换为特定CPU的本机代码,该过程是由即时编译器(Just In Time,JIT)来完成的。CLR还提供与自动垃圾回收、异常处理和资源管理有关的其他服务。由CLR执行的代码有时称为“托管代码”,与之相对应的是编译为面向特定系统的本机机器语言的“非托管代码”。
关于C#源代码的编译与执行如下图:
在JIT编译生成本机代码之后,编译好的本机代码会被存储在一个缓冲区中缓存,下次调用相同的程序集时,可直接从缓冲区中获取本机代码,从而避免了二次验证和编译。这样的使用方式,系统只在首次调用时才会造成一些性能损失(JIT编译过程),所以C#程序在第一次调用的时候,会明显感觉慢一些。