静态构造函数和单例

Static Constructor and singleton

朋友告诉我下面是在C#

中创建singleton design pattern的方法之一
    public class class1{

    public static class1 Obj { get; private set; }

    static class1()
    {
        Obj = new class1();
    }
}

他告诉我静态构造函数在应用程序中只运行一次,所以只会创建一个class1实例, 但我看到我必须添加这个 if(Obj==null) 来检查对象

的存在
      public class class1{

        public static class1 Obj { get; private set; }

        static class1()
        {
            **if(Obj==null)**
            Obj = new class1();
        }
    }

哪个代码是正确的?

假设唯一设置Obj的地方是在static构造函数中,第一个代码片段是正确的;第二个代码片段是多余的。

因为 static 个构造函数 运行 每个 class 只有一次。如果没有其他路径设置Obj,它的值将永远是static构造函数开头的null。因此,检查 if(Obj==null) 总是会成功,这使得它变得多余。

static constructor 只会被调用一次,在分配静态变量之前的某个时刻。
这意味着您的朋友是正确的,您不需要 if 声明 - 它是多余的。
这是因为您不能手动调用 static constructor,它只会在 运行 时间开始时调用一次。

进一步阅读: