CLR via C# 第一章(3)

NGen.exe工具,将一个应用程序集的所有IL代码编译成本地代码,并将这些代码保存到一个磁盘文件中,可以避免在运行时进行编译。

1.4.1 IL是基于栈的

,这意味着它的所有指令都要将操作数压入push一个执行栈, 并从栈弹出pop结果,IL指令是“无类型”的。将IL编译成本地cpu指令时,CLR会执行验证,以保证代码是安全无错的,在托管模块的元数据中,包含了要由验证过程使用的所有方法和类型信息。

1.4.2 不安全的代码

不安全的代码允许直接操作内存地址,并操作这些地址出的字节。用unsafe关键字标注,/unsafe。

PEVerify.exe检查一个程序集的所有方法,并报告其中含有的不安全代码的方法。

1.5 本地代码生成器

NGen.exe  将IL代码编译成本地代码   提升性能,但要慎用。

1.6 Framework 类库

FCL是一组DLL程序库的统称。

1.7 通用类型系统

类型是CLR的根本,微软制定了“通用类型系统”CTS,描述类型定义和行为。

类型成员:字段(数据变量)、方法(函数)、属性(getter和setter)、事件(在对象以及其他相关对象之间实现了一个通知机制)。

CTS还指定了类型可视性规则以及类型成员的访问规则。

对类型成员的访问限制:

  • private成员只能由同一个类class类型中的其他成员访问。
  • family成员可有派生类型访问,不管那些类型是否在同一程序集中,C#中是protected
  • family and assembly 成员可由派生类型访问,但这些派生类型必须位于同一程序集。
  • assembly 成员可由同一程序集的任何代码访问,C#中是internal
  • family or assemly 成员可由任何程序集镇南关的派生类型访问,也可由同一程序集正的任何类型访问,C#中是protected internal
  • public 成员可由任何程序集中的任何代码访问。

所有类型最终必须从System.Object类型继承。

posted @ 2011-03-19 19:24  dotNet_Fan  阅读(222)  评论(0编辑  收藏  举报