windows C#-静态构造函数
静态构造函数用于初始化任何静态数据,或执行仅需执行一次的特定操作。 它会在创建第一个实例或引用任何静态成员之前自动调用。 静态构造函数最多调用一次。
class SimpleClass
{
// Static variable that must be initialized at run time.
static readonly long baseline;
// Static constructor is called at most one time, before any
// instance constructor is invoked or member is accessed.
static SimpleClass()
{
baseline = DateTime.Now.Ticks;
}
}
有多个操作在静态初始化时执行。 这些操作按以下顺序执行:
- 静态字段设置为 0。 通常由运行时执行此初始化。
- 静态字段初始值设定项运行。 派生程度最高类型的静态字段初始值设定项运行。
- 基类型静态字段初始值设定项运行。 以直接基开头从每个基类型到 System.Object 的静态字段初始值设定项。
- 所有静态构造函数运行。 任何静态构造函数都会运行,从 Object.Object 的最终基类到每一个基类,再到类型。 静态构造函数执行的顺序没有指定。 但是,在创建任何实例之前,层次结构中的所有静态构造函数都会运行。
静态构造函数在创建任何实例之前运行的规则有一个重要例外。 如果静态字段初始值设定项创建了该类型的实例,那么该初始值设定项(包括对实例构造函数的任何调用)将在静态构造函数运行之前运行。 这在单一实例模式中最为常见,如以下示例所示:
public class Singleton
{
// Static field initializer calls instance constructor.
private static Singleton instance = new Singleton();
private Singleton()
{
Console.WriteLine("Executes before static constructor.");
}
static Singleton()
{
Console.WriteLine("Executes after instance constructor.");
}
public static Singleton Instance => instance;
}