每个类型都有静态构造函数吗?
Does every type have static constructor?
根据documentation:
自动调用静态构造函数。它在创建第一个实例或引用任何静态成员之前初始化 class。
这是否意味着每个类型(有或没有静态成员)都有静态构造函数?
或者静态构造函数出现在具有静态成员或显式定义的类型中?
此类型是否具有在后台自动调用的静态构造函数?
class Test
{
public Test()
{
System.Console.WriteLine("Type initialized!");
}
}
引用文档,答案似乎是否,只有显式编写静态构造函数的类型才有。有两点暗示了这一点:
If you don't provide a static constructor to initialize static fields, all static fields are initialized to their default value as listed in Default values of C# types.
这表明并不总是需要静态构造函数,并且 CLR 具有默认行为。
The presence of a static constructor prevents the addition of the BeforeFieldInit type attribute. This limits runtime optimization.
这表明 CLR 可以根据静态构造函数的存在(或不存在)更改其行为。
也就是说,任何 class 或结构都可以有一个静态构造函数,无论它是否有任何静态成员。不过好像你不写编译器不会自动生成
根据documentation: 自动调用静态构造函数。它在创建第一个实例或引用任何静态成员之前初始化 class。
这是否意味着每个类型(有或没有静态成员)都有静态构造函数? 或者静态构造函数出现在具有静态成员或显式定义的类型中?
此类型是否具有在后台自动调用的静态构造函数?
class Test
{
public Test()
{
System.Console.WriteLine("Type initialized!");
}
}
引用文档,答案似乎是否,只有显式编写静态构造函数的类型才有。有两点暗示了这一点:
If you don't provide a static constructor to initialize static fields, all static fields are initialized to their default value as listed in Default values of C# types.
这表明并不总是需要静态构造函数,并且 CLR 具有默认行为。
The presence of a static constructor prevents the addition of the BeforeFieldInit type attribute. This limits runtime optimization.
这表明 CLR 可以根据静态构造函数的存在(或不存在)更改其行为。
也就是说,任何 class 或结构都可以有一个静态构造函数,无论它是否有任何静态成员。不过好像你不写编译器不会自动生成