这是一个有效的,懒惰的,线程安全的Singleton实现C#吗?
问题描述:
我实现了一个Singleton模式是这样的:这是一个有效的,懒惰的,线程安全的Singleton实现C#吗?
public sealed class MyClass {
...
public static MyClass Instance {
get { return SingletonHolder.instance; }
}
...
static class SingletonHolder {
public static MyClass instance = new MyClass();
}
}
从周围的Googling为C#辛格尔顿实现,它似乎并不像这做的事情在C#中的常用方法。我发现了一个类似的实现,但SingletonHolder类不是静态的,并且包含一个显式(空)静态构造函数。
这是一个有效的,懒惰的,线程安全的方式来实现Singleton模式?还是有我失踪的东西?
答
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();
}
}
通知。