静态构造函数的奇怪行为

时间:2016-06-24 21:56:40

标签: c# .net

我有以下类型:

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???");
    }
}

为什么静态构造函数只在调用某个方法时被称为

1 个答案:

答案 0 :(得分:8)

  

静态构造函数用于初始化任何静态数据,或执行仅需要执行一次的特定操作。在创建第一个实例或引用任何静态成员之前会自动调用它。

Source

仅在需要时调用静态构造函数。在第二个示例中,不需要它,因为没有创建实例,也没有引用任何静态成员。

该页面继续列出静态构造函数的一些其他属性。最值得注意的是:

  
      
  • 无法直接调用静态构造函数。
  •   
  • 用户无法控制程序中何时执行静态构造函数。
  •   

因此,虽然引用的MSDN页面上的摘要声明在引用任何静态成员之前调用它,但您无法确切地确定何时可能。因此,您可能应该注意在构造函数中执行的代码。