簡體   English   中英

擁有帶有私有設置程序或私有字段且擁有屬性的自動實現屬性的哪個更好?

[英]Which one is better to have auto-implemented property with private setter or private field and property just getter?

我的問題可能是一個舊主題的一部分-“屬性與字段”。

我遇到的情況是,變量對於外部類是只讀的,但需要在類內部進行修改。 我可以通過2種方法來解決:

第一:

private Type m_Field;
public Type MyProperty { get { return m_Field; } }

第二:

public Type MyProperty { get; private set; }

在閱讀了幾篇文章之后(大部分內容涵蓋了使用公共屬性而不是公共領域的好處),我不知道第二種方法是否比第一種有優勢,但是編寫的代碼更少。 我有興趣在項目中使用哪種方法更好(為什么),或者這只是個人選擇。

也許這個問題不屬於SO,所以我先向您道歉。

第二個版本產生的雜波較少,但靈活性較差。 我建議您使用第二個版本,直到遇到必須使用第一個版本然后進行重構的情況為止-更改將始終是該類的本地內容,因此不必為此擔心太多!

通常,編寫更少的代碼是一個好主意。 您編寫的代碼越少,產生的錯誤也越少:)

無論如何,第二個將幾乎可以編譯為第一個,因此IMO始終使用第二個,因為它的代碼更簡潔。

我傾向於使用第一種方法的唯一場景是當我想延遲加載屬性時,例如

private List<string> _items;
...

public List<string> Items
{
    get
    {
        if (_items == null)
        {
            _items = new List<string>();
            // load items
        }
        return _items;
    }
}

第二個版本較短,所以我認為通常會更好。 例外是,當唯一的寫訪問發生在構造函數中時。 然后,我更喜歡第一個版本,因為這允許將該字段標記為readonly

對於調試,第二個是最好的。 否則,您將不得不在設置該字段的每個位置放置斷點。 在第二個步驟中,您在屬性集上設置了一個斷點。

我個人比較喜歡第二個版本,因為它寫的少,所以我可以花些時間做更復雜的編碼。。。在我看來,它還可以促進延遲開發。

暫無
暫無

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

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