我实现了像这样的Singleton模式:
public sealed class MyClass {
...
public static MyClass Instance {
get { return SingletonHolder.instance; }
}
...
static class SingletonHolder {
public static MyClass instance = new MyClass ();
}
}
从谷歌搜索C#Singleton实现,似乎这不是在C#中做事的常用方法。我发现了一个类似的实现,但SingletonHolder类不是静态的,并且包含一个显式(空)静态构造函数。
这是一种有效,懒惰,线程安全的方式来实现Singleton模式吗?或者有什么我想念的东西?
答案 0 :(得分:6)
Jon Skeet编写了一篇关于在C#中实现Singleton模式的article。
延迟实现是版本5:
public sealed class Singleton
{
Singleton()
{
}
public static Singleton Instance
{
get
{
return Nested.instance;
}
}
class Nested
{
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Nested()
{
}
internal static readonly Singleton instance = new Singleton();
}
}
特别注意,即使它是空的,你也必须显式地声明一个构造函数,以使它成为私有的。