跳到主要内容

C#中有没有静态构造函数,如果有是做什么⽤的?

参考答案:

是的,C# 中有静态构造函数(Static Constructor)。静态构造函数具有以下特点:

  1. 静态构造函数不能有访问修饰符:它们总是隐式地具有 private 访问修饰符。这意味着你不能在类的外部调用它们。
  2. 静态构造函数不能被继承或重载:在一个类中只能有一个静态构造函数。
  3. 静态构造函数在首次引用类的任何静态成员之前自动执行:这是它们最主要的用途。静态构造函数通常用于初始化静态字段或执行仅需要执行一次的操作,例如在加载程序集时。
  4. 没有参数:静态构造函数不接受任何参数。
  5. 不能直接调用:你不能像调用普通方法那样调用静态构造函数。它们是由 .NET 运行时自动调用的。

下面是一个简单的示例,展示了静态构造函数的使用:

public class MyClass
{
    // 静态字段
    public static int StaticField;

    // 静态构造函数
    static MyClass()
    {
        // 这里初始化静态字段
        StaticField = 42;
        // 执行其他只需要执行一次的操作
        Console.WriteLine("Static constructor called.");
    }

    // 普通构造函数
    public MyClass()
    {
        Console.WriteLine("Instance constructor called.");
    }
}

class Program
{
    static void Main()
    {
        // 在这里,由于我们首次引用了 MyClass 的静态成员,所以静态构造函数会被自动调用
        int value = MyClass.StaticField;
        
        // 随后创建 MyClass 的实例时,普通构造函数会被调用
        MyClass obj = new MyClass();
    }
}

当你运行上述程序时,你会看到首先输出“Static constructor called.”,然后是“Instance constructor called.”。这表明在创建类的实例之前,静态构造函数已经被执行了。

静态构造函数通常用于执行那些不需要对每个对象实例重复执行的任务,例如加载配置设置、初始化共享资源或执行其他一次性操作。