2012-07-17 70 views
6

我正在看一些同事編寫的代碼,而我期望發生的不是。下面是代碼:試圖瞭解靜態在這種情況下的工作

public class SingletonClass 
{ 
    private static readonly SingletonClass _instance = new SingletonClass(); 

    public static SingletonClass Instance 
    { 
     get { return _instance; } 
    } 

    private SingletonClass() 
    { 
     //non static properties are set here 
     this.connectionString = "bla" 
     this.created = System.DateTime.Now; 
    } 
} 

在另一類,我本來期望能夠做到:

private SingletonClass sc = SingletonClass.Instance.Instance.Instance.Instance.Instance.Instance; 

,並引用類的同一個實例。會發生什麼是我只能有一個.Instance。我沒有想到的東西。如果Instance屬性返回一個SingletonClass類,爲什麼我不能在該返回的類上調用Instance屬性,依此類推?

回答

12

如果Instance屬性返回一個SingletonClass類,爲什麼我不能在該返回的類上調用Instance屬性等等?

因爲你只能通過的SingletonClass式訪問.Instance,不通過該類型的實例。

由於Instance是靜態的,你必須通過類型訪問:

SingletonInstance inst = SingletonInstance.Instance; // Access via type 

// This fails, because you're accessing it via an instance 
// inst.Instance 

當您嘗試鏈這些,你切實做好:

SingletonInstance temp = SingletonInstance.Instance; // Access via type 

// ***** BAD CODE BELOW **** 
// This fails at compile time, since you're trying to access via an instance 
SingletonInstance temp2 = temp.Instance; 
+0

哦,對了,現在是有道理這樣做SingletonClass _instance = new SingletonClass(); 節省您的一個實例。 – Justin 2012-07-17 16:47:20

0

在代碼中,你正在返回SingletonClass的一個實例,它是靜態的單例實例

所以它不會允許你這樣做SingletonClass.Instance.Instance b ecause的SingletonClass.Instance正在返回的SingletonClass

所有它做的是從這個SingletonClass.Instance.Instance

相關問題