1 .net体系结构
1 CLR(公共语言运行库)
.net framework的核心是其运行库的执行环境,称为公共语言运行库或.net运行库。通常在clr控制下运行的代码称为托管代码。
clr在执行源码之前,先要编译它们,编译过程分为两步
(1) 把源码编译为IL语言【Microsoft 中间语言】
(2)CLR把IL编译为平台会用代码
编译在IL的优点
(1) 实现平台无关性{目前只有一种可能}
(2)提高性能【IL总是即时编译(JIT编译)】
(3)语言互操作性
(4)集成了与com、com+的互操作性
2 中间语言(IL)
IL主要特征
(1)面向对象和使用接口
(2)值类型与引用类型之间有巨大差别
(3)使用强数据类型
(4)使用异常来处理错误
(5)使用特性(attribute)
中间语言提供了许多预定义的的基本数据类型,它的特性是值类型与引用类型有很大差别。对于值类型,变量直接保存其数据,对于引用类型,变量仅保存其地址,对应数据可以通过该地址找到。
中间语言的一个重要方面是它基于强类型,强数据类型的好处是(1)语言互操作性(2) 垃圾收集(3)安全性(4)应用程序域
<1>语言互操作性中强数据类型的重要性
如果 类派生自其它类 ,或包含其它类的实例,它就需要知道其它类的所使用的数据类型,这就是需要强数据类型的重要原因。例如在vb 2008中的一个方法返回一个Integer类型的数据,但c#没用此数据类型,显然,我们只能从该类中派生才能使用使用该类。如果编译器知道如何把Integer类型映射为C#中某种已知的类型,就可以在c#中使用返回的类型。
CTS(通用类型系统)
目前.net通过CTS解决这个类型间通用的问题,CTS可以在中间语言中使用预定义的数据,所有的面向.net framework的语言都可以生成最终基于这此类型的编译代码。例如vb 2008中的Integer 类型实际上是一个32们有符号的整数,它实际上映射为中间语言的Int32,c# 也可以使用这种类型,所以就不会有问题了。在源代码中,c#使用int来代表Int32。无论是vb 2008 还是c#中编译器识别的预定义类型都映射为中间语言中的内置类型
CLS(公共语言规范)
公共语言规范和通用类型系统一起保证了语言的互操作性。CLS是一个最低标准集,所有的 面向.net 的 编译器 都支持它。其时编写非CLS兼容代码也是可以的,但不能保证语言互操作性。
<2>垃圾收集
垃圾收集器用于在.net进行内存管理。.NET Framework 的垃圾回收器管理应用程序的内存分配和释放。每次您使用 new 运算符创建对象时,运行库都从托管堆为该对象分配内存。只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。但是,内存不是无限大的。最终,垃 圾回收器必须执行回收以释放一些内存。垃圾回收器优化引擎根据正在进行的分配情况确定执行回收的最佳时间。当垃圾回收器执行回收时,它检查托管堆中不再被 应用程序使用的对象并执行必要的操作来回收它们占用的内存。
3 程序集
程序集是编译好的,面向.net Framework的代码的逻辑单元。程序集有两种:私有程序集和共享程序集
4 .net Framework类
5 命名空间
命名空间是.net避免命名冲突的一种方式