Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 关于单件设计模式的几个问题_.net_Design Patterns_C# 4.0_Singleton - Fatal编程技术网

.net 关于单件设计模式的几个问题

.net 关于单件设计模式的几个问题,.net,design-patterns,c#-4.0,singleton,.net,Design Patterns,C# 4.0,Singleton,我遵循一个简单的方法来理解单吨的设计模式。我对他们采取的方法没有什么疑问 第二种方法是静态初始化 我不清楚为什么这个类被声明为密封的。 为什么他们将私有实例变量instance标记为只读? 根据下列句子之一: 此外,变量被标记为只读,这意味着它可以 只能在此处显示的静态初始化期间分配,或 在类构造函数中 不,严格来说,您不需要这样做,但是如果您允许一个单例被多次初始化,那么它将导致额外的混乱和复杂性 最内部的实例是一个属性,而不是一个类-将其设置为静态允许轻松访问,而无需首先创建实例类的实例,这

我遵循一个简单的方法来理解单吨的设计模式。我对他们采取的方法没有什么疑问

第二种方法是静态初始化

我不清楚为什么这个类被声明为密封的。 为什么他们将私有实例变量instance标记为只读?
根据下列句子之一:

此外,变量被标记为只读,这意味着它可以 只能在此处显示的静态初始化期间分配,或 在类构造函数中

不,严格来说,您不需要这样做,但是如果您允许一个单例被多次初始化,那么它将导致额外的混乱和复杂性


最内部的实例是一个属性,而不是一个类-将其设置为静态允许轻松访问,而无需首先创建实例类的实例,这是不必要的,也不会真正提供任何好处。

该类未声明为静态,但其他类无法将其子类化。之所以这样做是因为所讨论的单例实现知道只实例化这个特定类的实例

如果您将其子类化: 公共类子项:单例{…} 子类仍将实例化基类: 子实例 仍将返回Singleton实例,这将导致代码混乱


readonly增加了代码的可读性,并防止将来修改类时出错。

程序员交换中有一些不错的信息:因为我在声明时正在初始化实例本身。我认为将此变量标记为只读没有任何意义。这只是我的理解。@kumar-是的,您在声明时正在初始化,但如果不将其设置为只读,那么除了约定之外,就没有什么可以阻止它在以后被修改了——这又回到了我的上述观点——以及其他答案中解释的观点。我的错误,它被声明为sealed.com,即使我是singleton类的子类。由于singleton类中的私有构造函数,我无法创建子类的实例。我仍然不清楚您的解释您的声明-singleton仍将实例化基类;它将实例化哪个基类?你能说清楚吗?如果你有一个单例类a,它是在MSDN上实现的。然后编写继承A的类B,即使调用B.Instance,也会得到A的实例。为了防止这种混淆,sealed关键字阻止继承singleton类。