2010-04-11 56 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(); 
    } 
} 

通知。

相關問題