1.什么是.NET Framework?
.NET Framework 是用于代码编译和执行的集成托管环境,换句话说,它管理着应用程序运行的方方面面,包括程序首次运行的编译、为程序分配内存以存储数据和指令、对应用程序授予或拒绝相应的权限、启动并管理应用程序执行,并且管理多余内存的再分配。
由于所有的.NET应用程序都在.NET Framework上执行,所以开发人员只需考虑如何与.NET Framework打交道,而不必关心.NET Framework底层的实现。
.NET Framework 由两个主要组件组成:公共语言运行库(Common Language Runtime,CLR)和.NET Framework 类库
参考图1
参考图2
1.1源代码编译与执行过程
1.2相关术语
1)公共语言运行库CLR
公共语言运行库是 .NET Framework 的基础。
您可以将运行库看作一个在执行时管理代码的环境,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。事实上,代码管理的概念是运行库的基本原则。
以运行库为目标的代码称为托管代码,而不以运行库为目标的代码称为非托管代码。托管代码的编译和执行如图:
2)中间语言MSIL
C#和VB.NET的代码首先被编译为Microsoft中间语言(MSIL)储存在本地。当需要运行这些托管代码时,CLR又对MSIL进行了第二次编译(Just in time,JIT编译),将MSIL代码转换成本机代码(本机代码是针对当前CPU的可执行二进制代码)。
中间语言MSIL的特性:
a 面向对象和接口
b 值类型和引用类型差别巨大
c 强数据类型
d 使用异常处理错误
e 使用特性(attribute)
3)托管代码Managed Code与非托管代码Unmanaged Code
托管代码参照http://baike.baidu.com/view/159896.htm
优点:a 平台无关性 b 提高性能(JIT即时编译,针对不同处理器有特殊优化) c 语言的互操作性
非托管代码参照http://baike.baidu.com/view/160068.htm
4)通用类型系统(Common Type System,CTS)
通用类型系统构成了.NET Framework的公共语言运行库的基础,它定义了.NET Framework中的所有的数据类型,并提供了面向对象的模型以及各种语言需要遵守的标准。简单来说,无论我们用C#还是VB.NET开发,它们中的所有数据在编译后都转化成了CTS中定义的类型,这就意味着.NET代码中的全部数据最终都以相同的数据类型存储。
5)公共语言规范(Common Language Specification,CLS)
公共语言规范(Common Language Specification,CLS)和通用类型系统一起确保语言的互操作性。CLS是一个最低标准集,所有面向.NET的编译器都必须支持它。因为IL是一种内涵非常丰富的语言,大多数编译器的编写人员有可能把给定的编译器的功能限制为只支持IL和CLS提供的一部分特性。只要编译器支持已在CLS重定义的内容,这就是很不错的。
例如:C#支持无符号数字类型,该特征能通过CTS的测试,但CLS却仅仅识别符号数字类型。因此,如果用户在一个组件中使用C#的无符号类型,就可能不能与不使用无符号类型的语言(如VB.NET)设计的.NET组件实现互操作。这里用的是“可能不”,而不是“不可能”,因为这一问题实际依赖于对non-CLS-compliant项的可见性。事实上,CLS规则只适用于或部分适用于那些与其他组件存在联系的组件中的类型。实际上,用户能够安全实现含私有组件的项目,而该组件使用了用户所选择使用的.NET语言的全部功能,且无需遵守CLS的规范。另一方面,如果用户需要.NET语言的互操作性,那么用户的组件中的公共项必须完全符合CLS规范。
参考资源
1)Msdn:ms-help://MS.MSDNQTR.v90.chs/dv_fxintro/html/29848c96-fc36-462d-8072-ba223a40b697.htm
2)《.NET Framework 2.0 程序设计》