我的朋友告诉我,以下是在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();
}
}
哪个代码是正确的?
答案 0 :(得分:4)
假设设置Obj
的唯一位置在static
构造函数中,第一个代码段是正确的;第二个代码片段是多余的。
由于static
构造函数每个类只运行一次。如果没有其他路径可以设置Obj
,则其值始终为null
构造函数开头的static
。因此,检查if(Obj==null)
将始终成功,这使其变得多余。
答案 1 :(得分:2)
static constructor
只会在分配静态变量之前的某个时刻被调用一次
这意味着你的朋友是正确的,你不需要if
声明 - 这是多余的
这是因为您无法手动调用static constructor
,只能在运行时开始调用一次。