簡體   English   中英

與Singleton Pattern Design中使用的類型相同的Class屬性

[英]Class property with same type like used in Singleton Pattern Design

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

例如Singleton Design:

public class Singleton
{
    private static Singleton instance;

    private Singleton() {}

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

這怎么可能。 尚未聲明。 它就像一個遞歸函數。 我不明白邏輯。

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

有趣的問題!

將您的課堂視為一個想法。 編譯器知道您的想法本身,因為它在同一區域(名稱空間)。 因此,編譯沒有問題。

遞歸函數涉及一個付諸實踐的想法。 如果您遞歸調用函數,則將其繼續放置在計算機堆棧中,該堆棧最終將溢出。 1個

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

同樣,對於static (或在VB中為Shared )變量,對於該類的所有實例,該變量只有一個實例。 您實際上不需要類的實例來調用靜態成員,屬性或函數。

總結一下我的觀點:這種模式不會導致遞歸,因為您永遠不會導致從構造調用的類中構造類。 如果您的Instance屬性嘗試調用自身來獲取和實例,則將導致遞歸。


  1. 順便說一句,堆棧上的剩余空間可能很小,這取決於您已經在堆棧上放置了多少。 此尾遞歸邏輯應始終用循環替換: 遞歸函數調用Throw StackOverFlowException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM