C#2008与.NET 3.5 高级程序设计读书笔记(1)--.NET之道

1..NET平台构造块(CLR、CTS和CLS)简介

CLR:从程序员的角度看,.NET可以理解为一个运行库环境和一个全面的基类库。运行库层的正式名称是CLR(公共语言运行库)。其主要作用是为我们定位、加载和管理.NET类型,同时也负责一些低层细节的工作,如内存管理,创建应用程序域、线程和对象上下文边界,安全检查等。

CTS:.NET平台的另一个构造块是CTS(公共类型系统)。CTS规范完整地描述了运行库所支持的所有可能的数据类型和编程结构,指定了这些实体间如何交互,也规定了它们在.NET元数据格式中的表示(本章的后面将会给出更多关于元数据的信息)。

CLS:CLS(公共语言规范)是一个相关的规范,定义了一个让所有的.NET语言都支持的公共类型和编程结构的子集。这样,如果构造的.NET类型仅暴露与CLS兼容的特性,那么可以肯定其他所有支持.NET的语言都能使用它们。

C#2008与.NET 3.5 高级程序设计读书笔记(1)--.NET之道_第1张图片

2..NET程序集概览

,.NET二进制文件不包含特定于平台的指令,它包含的是平台无关的IL(微软中间语言)和类型元数据。图1-3清楚显示了这个流程。

C#2008与.NET 3.5 高级程序设计读书笔记(1)--.NET之道_第2张图片

除CIL指令外,程序集还包含元数据(metadata)。元数据详尽描述了二进制文件中每个“类型”的特征.,除CIL和类型元数据之外,程序集本身也使用元数据进行描述,这类元数据的正式名称是清单(manifest)。清单记录了程序集的当前版本信息、文化信息(用于本地化字符串和图像资源)和正确执行所需的外部引用程序集的列表。

除CIL指令以外,.NET程序集还包括全部完整且准确的元数据,这些元数据描述了每一个二进制文件中定义的类型(类、结构、枚举等),以及每个类型的成员(属性、方法、事件等)。值得庆幸的是,生成最新的和最大的类型元数据总是编译器的工作而不是程序员的工作。因为.NET元数据非常详细,所以程序集完全成了自描述的实体。

最后也是最重要的一点是,请记住.NET程序集也包含描述程序集自身的元数据(称为清单)。在许多细节中,清单记录了所有确保现有程序集正常工作的外部程序集、程序集的版本号、版权信息等。同类型元数据一样,生成程序集清单也是编译器的工作。

3.CTS:

(1).CTS类型成员是集合{构造函数,终结器,静态构造函数,嵌套类型,运算符,方法,属性,索引器,字段,只读字段,常量,事件}中的元素之一。

(2).内建的CTS数据类型

表1-2 内建的CTS数据类型
C#2008与.NET 3.5 高级程序设计读书笔记(1)--.NET之道_第3张图片

4.CLS:

CLS(公共语言规范)就是这样一套规则,它清晰地描述了支持.NET的编译器必须支持的最小的和完全的特征集,以生成可由CLR承载的代码,同时可以被基于.NET平台的其他语言用统一的方式进行访问。CLS可以看成是由CTS定义的完整功能的一个子集。

5.CLR:

CLR中最重要的部分是由名为mscoree.dll的库(又称公共对象运行库执行引擎)物理表示的。当用户程序引用一个程序集,要使用它时,mscoree.dll将首先自动加载,然后由它负责将需要的程序集导入内存。运行时引擎负责许多任务,首要的任务是负责解析程序集的位置,并通过读取其中包含的元数据,在二进制文件中发现所请求的类型。接着,CLR在内存中为类型布局,将关联的CIL编译成特定平台的指令,执行所有需要的安全检查,然后运行当前的代码。
除了导入自定义的程序集和建立自定义的类型,需要时,CLR也会与包含在.NET基类库的类型相交互。虽然完整的基类库被分为若干分离的程序集,但最重要的程序集是mscorlib.dll。mscorlib.dll包含大量核心类型,它们封装了各种常见的编程任务与.NET语言用到的核心数据类型。当建立一个.NET解决方案时,你可以自动访问这些程序集。
图1-4说明了发生在源代码(它使用了许多基类库类型)、.NET编译器和.NET执行引擎之间的工作流。

C#2008与.NET 3.5 高级程序设计读书笔记(1)--.NET之道_第4张图片

5..NET命名空间

C#2008与.NET 3.5 高级程序设计读书笔记(1)--.NET之道_第5张图片

小节:

.NET根本上就是一个运行库执行引擎(mscoree.dll)和基类库(mscorlib.dll等)。CLR可以承载任意符合托管代码规则的.NET二进制文件(又称程序集)。而程序集中有很多CIL指令(以及类型元数据和程序集清单),这些指令通过即时(JIT)编译器编译为特定平台的指令。

你可能感兴趣的:(.net)