CLR-via-C#笔记——第四章

类型基础

《CLR via C#》第四章:类型基础

所有类型都从System.Object派生

new操作符做的事:

  • 计算类型及其所有基类型中定义的所有实例字段需要的字节数。堆上每个对象都需要一些额外的成员,包括“类型对象指针”和“同步块索引”。CLR利用这些成员管理对象。
  • 从托管堆中分配类型要求的字节数,分配对象的内存,分配的所有字节都设为0。
  • 初始化对象的“类型对象指针”和“同步块索引”成员。
  • 调用类型的实力构造器,传递new调用中指定的实参。最终调用System.Object的构造器。

类型转换

可以CLR最重要的特性之一就是类型安全。
使用C#的is和as操作符来转型。
is操作符检查对象是否兼容于指定类型,永远不抛出异常,如果对象引用为null,则总是返回false。
as操作符核实类型是否兼容,如果不兼容则返回null。as操作符只校验一次对象类型。它与强制类型转换工作方式一样,只是不抛出异常。
C#允许类型定义转换操作符方法,只有在使用表达式时才调用这些方法,as或is操作符不调用。

命名空间和程序集

CLR对命名空间一无所知,访问类型时,CLR需要知道类型的完整名称和该类型的定义具体在那个程序集中。

运行时的相互关系

clr4_1.png