2012-01-26 125 views
0

這是一個單獨的類爲什麼在單例類中實例成員是靜態的?

public sealed class Singleton 
{ 
    static Singleton instance=null; 
    static readonly object padlock = new object(); 

    Singleton() 
    { 
    } 

    public static Singleton Instance 
    { 
     get 
     { 
      lock (padlock) 
      { 
       if (instance==null) 
       { 
        instance = new Singleton(); 
       } 
       return instance; 
      } 
     } 
    } 
} 

我的問題是static Singleton instance=null;爲什麼這是靜態的?

+0

這並不是特別像.Net中的(當前)線程安全,高性能單例模式。 (我意識到這是模式的MSDN P&P代碼)。請參閱@JonSkeet的http://csharpindepth.com/Articles/General/Singleton.aspx –

+0

因爲如果不是,它不會是單身人士。 –

回答

6

的「實例」字段保存的唯一實例的引用。

它存儲在一個靜態變量中,因爲它的範圍必須是類本身而不是特定的實例。

0

因爲它如果不是靜態的,它將只是一個單身名字。我可以創建數千個實例。

+1

使用私有構造函數,您無法創建數千個實例。 –

+0

使用構造函數,你不能創建一個SINGLE實例,這使得singleton成爲一個noinstanceton。 – TomTom

5

由於您在靜態屬性(實例)內引用了變量,因此無法在靜態方法或屬性內引用實例變量。

擁有一個單例的想法是在任何時候只有一個且只有一個實例在運行。

0

因爲你只想要一個(靜態)實例曾經在節目

0

它是靜態的,所以Singleton類型的每個實例將使用相同的變量,因此是「單例」模式。

1

單例的目的是隻有該對象的一個​​實例[1]。通過使用在第一次訪問時自動實例化的私有靜態實例創建一個密封類,您可以提供其必需的特性,僅創建實際對象的一個​​副本,然後由系統中其他位置的Singleton.Instance屬性訪問該實例。

[1]在任何AppDomain中,無論如何。

0

簡而言之,Singleton是一種設計模式,用於確保在給定範圍內只創建一個東西的實例。

該圖案是通過幾個主要概念完成:

  1. 創造一些對象
  2. 創建私有構造
  3. 不允許的類的一個靜態實例由另一個(密封)
  4. 被擴展
  5. 提供一種靜態方法,返回靜態對象的實例

您提供的示例代碼是單例模式的教科書示例。

0

我想是因爲你使用:

public static Singleton Instance() 

這個函數是靜態的,所以你的實例變量必須是靜態的了。

相關問題