本文我们将考察类型能定义的某些特殊成员在大力简化处理类型及其对象实例需要的语法方面这些类型有助于面向对象设计
类型构造器
你已经熟悉了什么是构造器它负责对象实例状态的初始化除了实例构造器以外Microsoft(r)NET公共语言运行时(CLR)还支持类型构造器(也叫做静态构造器类构造器或类型初始化)类型构造器可被应用到接口类和数值类型它允许任何在类型中声明的成员被访问之前实现必要的初始化类型构造器不需要参数并且总是返回void类型类型构造器只访问类型的静态字段并且其通常的目的是初始化这些字段在类型的任何实例被创建之前以及类型的任何静态字段或方法被引用之前必须要保证已经运行了类型构造器
许多语言(包括C#)在定义类型时都自动产生类型构造器但是某些语言需要显式(手工)实现类型构造器
为了理解类型构造器让我们研究一下列在C#中定义的类型
class Atype {
static int x = ;
}
在建立这个代码时编译器自动地为产生Atype类型构造器这个构造器负责初始化静态字段x为值如果你使用ILDasm很容易认出类型构造器方法因为它们的名字都是cctor(对于类构造器而言)
在C#中通过在类型中定义静态构造器方法你可以自己实现类型构造器关键字static的使用意味着这时类型构造器而不是实例构造器下面是一个非常简单的例子
class AType {
static int x;
static AType() {
x = ;
}
}
这个类型定义与前面的相同注意类型构造器决不能试图创建自己的类型实例而且构造器也不能引用类型的非静态成员
最后如果你用C#编译器编译下列代码它产生单独的类型构造器方法
class AType {
static int x = ;
static AType() {
x = ;
}
}
这个构造器首先初始化x=然后初始化x=换句话说编译器产生的结果类型构造器首先包含静态字段的初始化代码随后是类型构造器的代码
[] [] []