C# 如何在结构中调用静态无参数构造函数?

C# 如何在结构中调用静态无参数构造函数?,c#,struct,C#,Struct,当在结构中调用静态无参数构造函数时。要显式但安全地调用它(只调用一次,无需担心它是否存在等): 然而: 在结构中调用静态无参数构造函数时 如果你的意思是“运行时什么时候执行它”——唯一安全的答案是它需要执行的时候——确切的细节非常复杂,并且在运行时之间会发生变化。依靠这一事件的确切时间是不明智的。但是,它保证在您(例如)尝试访问任何静态字段之前执行。静态构造函数由运行时自动调用 调用时的规范详细信息: 11.3.10静态构造函数 触发结构类型的静态构造函数的执行 在应用程序中发生以下事件中的第一

当在结构中调用静态无参数构造函数时。

要显式但安全地调用它(只调用一次,无需担心它是否存在等):

然而:

在结构中调用静态无参数构造函数时


如果你的意思是“运行时什么时候执行它”——唯一安全的答案是它需要执行的时候——确切的细节非常复杂,并且在运行时之间会发生变化。依靠这一事件的确切时间是不明智的。但是,它保证在您(例如)尝试访问任何静态字段之前执行。

静态构造函数由运行时自动调用

调用时的规范详细信息:

11.3.10静态构造函数

触发结构类型的静态构造函数的执行 在应用程序中发生以下事件中的第一个 域:
  • 引用了结构类型的静态成员。
  • 一个 调用结构类型的显式声明构造函数

    创建结构类型的默认值(§11.3.4)不会触发 静态构造函数。(这方面的一个例子是 数组中的元素。)


    您不能手动调用静态构造函数,在加载类型时会自动调用它们。当您第一次在代码中引用
    TestStruct
    时,会调用静态构造函数。请查看“当加载类型时”。。。这是棘手的;它比这要微妙得多,复杂得多谢谢你宝贵的回答值得注意的是,虽然在类静态构造函数运行之前不可能访问类实例字段,但结构实例字段却不是这样。在创建包含实例之前,类实例字段不存在,而在类构造函数运行之前,类实例字段也不存在,但是结构字段可以在不涉及类型的情况下存在,并且一旦存在,就可以访问它们——同样也不涉及类型。
    struct TestStruct
    {        
        static TestStruct()
        {
            Console.WriteLine("TestStruct");
        }
    }
    
    System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(
        type.TypeHandle);