【发布时间】:2021-04-07 13:25:32
【问题描述】:
根据documentation: 自动调用静态构造函数。它在创建第一个实例或引用任何静态成员之前初始化类。
这是否意味着每种类型(有或没有静态成员)都有静态构造函数? 还是静态构造函数存在于具有静态成员或显式定义的类型中?
这种类型是否有在后台自动调用的静态构造函数?
class Test
{
public Test()
{
System.Console.WriteLine("Type initialized!");
}
}
【问题讨论】:
-
纯粹出于好奇,您可以查看 IL 代码。对此是否有实际兴趣,您是否有需要此答案才能做出决定的案例?
-
我认为您可以从文档中推断出并非所有类型都具有默认的静态构造函数。请参阅此评论:“静态构造函数的存在阻止了添加
BeforeFieldInit类型属性。这限制了运行时优化。”如果每个类型都被赋予了一个自动静态构造函数,那么文档中就不会存在这一行,并且BeforeFieldInit属性也不会被使用。 -
Here's the IL of this class in Sharplab.io。没有
.cctor(静态构造函数)。与the same class with a static member比较。
标签: c# .net static-constructor