.NET Framework学习笔记(一)

接触.net近大半年了,无论是web还是winform开发,都接触和了解了些。最近得知Jeffrey Richter来中国了,忽想起去年毕业离校前最后一次逛HUST的旧书店,经推荐买的一本大师写的《Applied Microsoft .NET Framework Programming》,暑假趁工作前的一段时间翻阅了下,虽很多内容迷迷糊糊,但前言有句很经典的话至今记得,而且经过一段工作的实践,体会愈发的强烈。大概的意思是“皮之不存,毛将焉附?从底层框架技术入手,探微知著”。大师的话肯定有非常大的借鉴意义,趁现在兴趣特浓,决定用一个月时间重读此书,通过写读书笔记的方式督促自己吧,每两天一篇,加油 

Microsoft .NET框架基本原理

1.       Microsoft .NET框架开发平台体系架构

.NET框架包含两部分:CLRFCL

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

托管模块有四部分组成:

PE表头(文件类型GUI,CUI,DLL等;文件创建的时间)

CLR表头CLR版本号,托管模块入口点方法的MethodDef元数据标记及其他信息的位置尺寸等)

元数据(描述源代码中定义或引用的类型和成员)

中间语言(IL)代码(编译器在编译源代码时产生的指令,CLR在运行时会将IL代码编译成本地CPU指令),由于生存期和执行行为受CLR管理的缘故,IL代码有时也称作托管代码(managed code)

 

元数据:

元数据省去了源代码编译时对头文件和库文件的需求;

Visual Studio .NET可以利用元数据来辅助我们编码,它的IntelliSense特性就是通过分析元数据来告诉我们某个类型提供了哪些方法及某个方法有哪些参数;

垃圾收集器可以利用元数据收集对象的生存期

……

 

其实和CLR直接打交道的是程序集assembly,而不是托管模块。默认情况下,编译器会将产生的托管模块转换为一个程序集,也就是说C#编译器产生的是一个包含清单的托管模块。程序集是一个或多个托管模块,以及一些资源文件的逻辑组合。清单manifest描述组成程序集的所有文件。

对于一个可重用,可部署,可实施版本管理的组件来说,程序集允许我们分离它的逻辑表示和物理表示。

 

CLR如何被加载?

当生成一个EXE程序集时,编译器/链接器会产生一些特殊的信息,并将它们嵌入到结果程序集的PE文件表头及其各个组成文件的.text部分。当EXE文件被调用时,这些特殊的信息将导致CLR被加载并初始化。CLR随后会定位到应用程序的入口点方法,从而以此来启动应用程序。

 

IL是一种独立与CPU的机器语言,可视作一种面向对象的机器语言。

我们可以直接以汇编语言的方式编写IL程序,此时可以获取CLR所有功能。并且IL不束缚于任何特定的CPU平台。

由于CPU不能直接执行IL指令,故还需CLR中即时JIT编译器的工作。

IL最大的好处不是对底层的抽象,而是大大提高了应用程序的健壮性robustness,当IL被编译成本地CPU指令时,CLR将执行一个验证verification过程。

 

CLR的所有内容都是围绕类型展开的,通用类型系统CLS专门用来描述类型的定义和行为

所有的类型都必须继承自预定义类型System.Object。这样可以使虽然语言不同,但类型的行为相同。

字段      字段是一个属于对象状态部分的数据成员。字段由它们的名称和类型标识

方法      方法是一个在对象上执行某种操作的函数。

属性      对于属性的调用者,属性看起来非常类似于字段。但对于属性的实现者,则看起来像方法(getset)。属性允许实现者在访问数值之前验证输入参数和对象状态的有效性,或者仅在需要的情况下进行求值运算。可以创建只读,只写和可读可写共三种属性。

事件     事件允许在一个对象和其他相关联的对象之间建立一个通知机制。

 

通用语言规范CLSCLR/CTS的一个子集,提供所有语言可用的特性。

 

CLR允许应用程序同时包含托管和非托管部分:

托管代码调用DLL中的非托管函数;

托管代码使用现存的COM组件;

非托管代码使用托管类型

posted @ 2009-06-06 16:40  zhdonghu  阅读(218)  评论(0编辑  收藏  举报