【发布时间】:2009-11-12 23:48:03
【问题描述】:
在阅读Jon Skeet's article on singletons in C# 时,我开始想知道为什么我们首先需要延迟初始化。看来文章中的第四种方法应该足够了,这里仅供参考:
public sealed class Singleton
{
static readonly Singleton instance=new Singleton();
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Singleton()
{
}
Singleton()
{
}
public static Singleton Instance
{
get
{
return instance;
}
}
}
在极少数情况下,如果您在单例上有其他静态方法,延迟初始化可能会有好处,但这不是一个好的设计。
那么人们能告诉我为什么延迟初始化如此热门吗?
【问题讨论】:
-
为什么他们仍然称其为“延迟初始化”?看起来这样做一点也不懒惰,称之为“复杂的初始化”、“有问题的初始化”或“容易出现缺陷的初始化”……其中之一会更准确地描述它;)
-
延迟初始化无需特殊的线程安全结构即可保证线程安全。 [1]en.wikipedia.org/wiki/Initialization_on_demand_holder_idiom
-
Jon Skeet 的文章已移至csharpindepth.com/Articles/General/Singleton.aspx。
标签: c# .net design-patterns singleton