簡體   English   中英

為getter和setter使用支持變量

[英]Using a backing variable for getters and setters

也許這是一個愚蠢的問題,但是,對於C#來說,我是一個新的合適的人(更多來自Java背景)並且在我看到的有關屬性的getter和setter的不同示例之間感到困惑。

在某些情況下,代碼如下所示:

    private string _something;
    public string Something
    {
        get { return _something; }
        set { _something = value; }
    }

但是,在其他示例中,他們不使用此支持memeber,因此更像是這樣:

    public string Something { get; set; }

我沒有看到使用這些支持變量(_something)的好處,除非你有一些關於變量設置的復雜邏輯。

我正在使用后一種方法編寫程序,但想檢查一下我沒有錯過任何東西。

有人可以解釋為什么人們選擇做前者嗎? 這是更好的“良好做法”嗎?

非常感謝!

我沒有看到使用這些支持變量(_something)的好處,除非你有一些關於變量設置的復雜邏輯。

如果你不使用它沒有任何優勢。 使用第二種方法,仍然有一個支持變量,但是你讓編譯器完成添加它的工作。 從.NET 3.5及更高版本開始,您當前的方法完全有效。

當然,只要您需要引入額外的邏輯,那么自己管理后備存儲就變得至關重要。

之前的語法在.NET 3.5之前是必需的,因此可以在舊代碼中找到。

它在功能上是等同的。

public string Something {get; 組; 只是空手而歸。 在后台,它正在做與上面完全相同的事情。

使用第一種語法的一個很好的理由是與MVVM體系結構一起使用,其中屬性綁定到前端元素。

就像是:

    private string _something;
    public string Something
    {
        get { return _something; }
        set { 
              _something = value; 
              OnNotifyPropertyChanged("Something");
            }
    }

這會提醒你的前端它的綁定屬性已被更改,它必須更新。

seconde方法是自動實施屬性

在實例中引用自動屬性與聲明公共字段相同,這會破壞封裝原則 因此,如果您不在同一個類中訪問它們,請使用自動屬性。 否則,使用成員(支持)字段並從本地方法引用它,同時通過普通的.NET屬性公開它們。

使用.NET 3.0添加自動屬性作為語法糖,因此您不再需要支持類中未引用的字段。

暫無
暫無

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

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