C# 如何在结构中调用静态无参数构造函数?
当在结构中调用静态无参数构造函数时。要显式但安全地调用它(只调用一次,无需担心它是否存在等): 然而: 在结构中调用静态无参数构造函数时C# 如何在结构中调用静态无参数构造函数?,c#,struct,C#,Struct,当在结构中调用静态无参数构造函数时。要显式但安全地调用它(只调用一次,无需担心它是否存在等): 然而: 在结构中调用静态无参数构造函数时 如果你的意思是“运行时什么时候执行它”——唯一安全的答案是它需要执行的时候——确切的细节非常复杂,并且在运行时之间会发生变化。依靠这一事件的确切时间是不明智的。但是,它保证在您(例如)尝试访问任何静态字段之前执行。静态构造函数由运行时自动调用 调用时的规范详细信息: 11.3.10静态构造函数 触发结构类型的静态构造函数的执行 在应用程序中发生以下事件中的第一
如果你的意思是“运行时什么时候执行它”——唯一安全的答案是它需要执行的时候——确切的细节非常复杂,并且在运行时之间会发生变化。依靠这一事件的确切时间是不明智的。但是,它保证在您(例如)尝试访问任何静态字段之前执行。静态构造函数由运行时自动调用 调用时的规范详细信息: 11.3.10静态构造函数 触发结构类型的静态构造函数的执行 在应用程序中发生以下事件中的第一个 域:
您不能手动调用静态构造函数,在加载类型时会自动调用它们。当您第一次在代码中引用
TestStruct
时,会调用静态构造函数。请查看“当加载类型时”。。。这是棘手的;它比这要微妙得多,复杂得多谢谢你宝贵的回答值得注意的是,虽然在类静态构造函数运行之前不可能访问类实例字段,但结构实例字段却不是这样。在创建包含实例之前,类实例字段不存在,而在类构造函数运行之前,类实例字段也不存在,但是结构字段可以在不涉及类型的情况下存在,并且一旦存在,就可以访问它们——同样也不涉及类型。
struct TestStruct
{
static TestStruct()
{
Console.WriteLine("TestStruct");
}
}
System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(
type.TypeHandle);