CLR via C# 第一章(3)
时间:2011-03-19 来源:adobe_fans
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类型继承。
相关阅读 更多 +