《.NET 框架程序设计》笔记(一)

 

.NET 框架程序设计》笔记

I部分 Microsoft .NET框架基本原理

第一章 Microsoft .NET框架开发平台体系架构

1.1 将源代码编译为托管模块

 

托管模块:一个需要CLR才能执行的标准Windows可移植可执行(protable executable, PE)文件。

 

托管模块的组成部分:

托管模块

            PE表头

                        文件类型(GUICUIDLL

                        时间标记(表示文件的创建日期)

                        本地CPU代码的一些信息(仅对于包含本地CPU代码的模块)

            CLR表头

                        所需的CLR的版本号

                        有关本地托管元数据,资源,强命名,标记等信息的位置和尺寸

            元数据

                        有本模块定义的类型和成员

                        引用的类型和成员

            中间语言代码(IL代码,拖管代码)

 

1.2 将托管模块组合为程序集

 

程序集:一个或多个托管模块,以及一些资源文件的逻辑组合。它提供了一种方式允许我们将一组文件看作一个单独的实体。

 

程序集的组成部分:

            清单,托管模块,资源文件。

 

1.3 加载通用语言运行时

 

当生成一个程序集时,编译器会在程序集文件的PE表头及.text部分嵌入一些特殊信息。当程序集被执行时,这些特殊信息将导致CLR被加载并初始化(加载MSCorEE.dll文件(Microsoft Component Object Runtime Execution Engine))。


MSCorEE.dll文件位于%windir%\system32目录下,可通过查看这个文件是否存在在判断是否安装了.NET框架。

 

1.4 执行程序集代码

 

托管模块中的IL

            IL是微软在咨询了一些商业和学术上的语言编译器作者后开发的一种独立于CPU的机器语言。

            IL汇编器:ILAsm.exe

            IL 反汇编器:ILDasm.exe

 

CLR的即时编译机制

            一个方法只在第一次被加载时编译成本地CPU代码。

            当应用程序关闭时编译生成的本地代码将被丢弃。

            运行同一应用程序的两个实例,编译器会生成两份本地代码。

 

即时编译引起的性能损失

            NGen.exe可以将一个程序集中的所有IL代码转换为本地代码。

 

IL与代码验证

            IL代码被编译为本地CPU指令时,CLR将执行代码验证(Verification),这一过程确保代码所做的每一件事情都是“安全”的。不安全会抛出System.Security.VerificationException

            因为验证过程可以确保代码是安全的,所以.NET环境中一个进程里可以运行多个应用程序(应用程序域)。

 

1.5 .NET框架类库

 

.NET框架允许开发人员创建的应用程序种类。

 

.NET框架中常用的命名空间。

 

1.6 通用类型系统

 

通用类型系统(Common Type System, CTS)用来规定类型的定义和行为。

 

CTS中的一些规则:

            一个类型可以包含0个或多个成员:字段、方法、属性、事件。

            类型及其成员的可见性:Private(private), Family(protected), Assembly(internal), FamilyAssembly, FamilyAssembly(protected internal), Public(public)

            类型只能单继承。

            所有类型都必须(直接或间接)继承自于定义类型System.Object

 

1.7 通用语言规范

 

通用语言规范(Common Language Specification, CLS)规定了可以被任何与CLS兼容的语言访问到的外部可见的类型和方法所必须遵循的规则。CLS规则不适用于仅在所定义程序集中可访问的代码。

 

各种语言提供了一个CLR/CTS的子集和一个CLS的超集。

一些CLS规则:

            方法传递的参数及返回值不能是无符号整形。

            不能仅用大小写区分公有方法。

            CLS的完整列表可参见.NET框架SDK文档中“跨语言互操作”部分。

 

告知编译器检查CLS兼容性:

            [assembly: CLSCompliant(true)]

 

1.8 与非托管代码互操作

 

略。

posted on 2006-11-12 00:44  Ray_bihpgh20  阅读(365)  评论(0编辑  收藏  举报

导航