2014-09-05 106 views
2

我不明白我們如何在尚未創建的類中使用相同的屬性和字段類型。像Singleton Pattern Design中使用的相同類型的類屬性

例如Singleton設計:

public class Singleton 
{ 
    private static Singleton instance; 

    private Singleton() {} 

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

這怎麼是可能的。它尚未宣佈。它就像一個遞歸函數。我無法理解這個邏輯。

回答

0

屬性和字段是靜態的。靜態成員不需要創建該類型的對象。它們就像那些放在<classname>命名空間中的舊程序和函數。

0

有趣的問題!

認爲你的課是一個想法。編譯器自己知道你的想法,因爲它在同一個區域(命名空間)。所以編譯沒有問題。

遞歸函數涉及到一個實踐的想法。如果你遞歸地調用一個函數,你一直把它放到最終會溢出的計算機堆棧中。 1

當您在自己內部引用一個類(實踐中的一個想法)時,您正在創建一個指向該類(想法)的特定實例的指針。所以一個指針可以引用另一個指針,甚至可以引用其中的同一個指針。

此外,在static(或VB中的Shared)變量的情況下,該類的所有實例都只有一個變量實例。您實際上不需要您的類的實例來調用靜態成員,屬性或函數。

總結我的ramblings:沒有這種模式引起的遞歸,因爲你永遠不會從調用內部構造類來構造它。如果您的Instance屬性試圖調用自己來獲取和實例,那會導致遞歸。


  1. 順便說一句,在堆棧上的剩餘空間可以根據你有多少已經放置在棧上是相當小的。這個尾遞歸邏輯應該總是被一個循環替換:Recursive Function Calls Throw StackOverFlowException
相關問題