我有以下类型:
internal struct TestStruct
{
static TestStruct()
{
Console.WriteLine("Constructor has been called!");
}
public void SomeMethod()
{
}
}
internal struct OtherTestStruct
{
static OtherTestStruct()
{
Console.WriteLine("This never gets displayed. But why???");
}
}
为什么静态构造函数只在调用某个方法时被称为?
答案 0 :(得分:8)
静态构造函数用于初始化任何静态数据,或执行仅需要执行一次的特定操作。在创建第一个实例或引用任何静态成员之前会自动调用它。
仅在需要时调用静态构造函数。在第二个示例中,不需要它,因为没有创建实例,也没有引用任何静态成员。
该页面继续列出静态构造函数的一些其他属性。最值得注意的是:
- 无法直接调用静态构造函数。
- 用户无法控制程序中何时执行静态构造函数。
因此,虽然引用的MSDN页面上的摘要声明在引用任何静态成员之前调用它,但您无法确切地确定何时可能。因此,您可能应该注意在构造函数中执行的代码。