静态构造函数和单例

时间:2015-05-25 10:14:12

标签: c# design-patterns singleton

我的朋友告诉我,以下是在singleton design pattern

中创建C#的方法之一
    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();
        }
    }

哪个代码是正确的?

2 个答案:

答案 0 :(得分:4)

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

由于static构造函数每个类只运行一次。如果没有其他路径可以设置Obj,则其值始终为null构造函数开头的static。因此,检查if(Obj==null)将始终成功,这使其变得多余。

答案 1 :(得分:2)

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

进一步阅读:https://stackoverflow.com/a/4506997/617485