簡體   English   中英

屬性支持領域 - 它有什么用?

[英]Properties backing field - What is it good for?

一方面,我知道屬性的可取用法是有一個支持字段,如下例所示:

    private int m_Capacity;

    public int Capacity
    {
        get { return m_Capacity > 0 ? m_Capacity : -666; }
        set { m_Capacity = value; }
    }

另一方面,使用上面的示例而不是丟棄字段並僅將屬性用於所有目的,我可以獲得什么好處,如下例所示:

    public int Capacity
    {
        get { return Capacity > 0 ? Capacity : -666; }
        set { Capacity = value; }
    }

使用支持字段用於常規(非自動實現)屬性有什么用處?

如果你這樣做:

public int Capacity 
{ 
    get { return Capacity > 0 ? Capacity : -666; } 
    set { Capacity = value; } 
}

那么你的代碼將有一個無限遞歸。 它永遠不會奏效。 那是因為Capacity的getter正在引用它自己。 設定者也是如此。

除非您使用自動屬性,否則您需要一個支持字段

如果您需要訪問m_Capacity的實際值,而不是從Capacity屬性獲得的“托管”值,則顯式私有成員ID非常有用,

編輯:其他帖子正確指出語法錯誤。 我也應該提到它,但我忽略了它,只是試着回答他的問題,這似乎與自動屬性有關

主要是因為你會得到一個StackOverflow。

不要忘記屬性只是生成getter和setter方法的簡寫語法。 他們看起來像田地,但他們不是。

支持字段支持封裝的概念。

封裝允許您稍后更改類的實現細節而不更改其接口。

這意味着擁有帶有getter和setter的支持字段而不是擁有公共類成員將使您的代碼對於未來的開發人員或您未來的自我而言​​更加健壯和/或可讀。

暫無
暫無

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

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