[英]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.