2010-04-11 58 views
5

我实现了一个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模式?还是有我失踪的东西?

回答

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(); 
    } 
} 

通知。

相关问题