也许这是一个愚蠢的问题,然而,我对C#(更多来自Java背景)很新,并且在我看到的有关属性的getter和setter的不同示例之间感到困惑。
在某些情况下,代码如下所示:
private string _something;
public string Something
{
get { return _something; }
set { _something = value; }
}
但是,在其他示例中,他们不使用此支持memeber,因此更像是这样:
public string Something { get; set; }
我真的没有看到使用这些支持变量(_something)的好处,除非你有一些关于变量设置的复杂逻辑。
我正在使用后一种方法编写程序,但想检查一下我没有错过任何内容。
有人可以解释为什么人们选择做前者吗?这是更好的做法吗?
非常感谢!
答案 0 :(得分:10)
我真的没有看到使用这些支持变量(_something)的好处,除非你有一些关于变量设置的复杂逻辑。
如果您不使用它,没有任何优势。使用第二种方法,仍然有一个支持变量,但是你让编译器完成添加它的工作。从.NET 3.5及更高版本开始,您当前的方法完全有效。
当然,只要您需要引入额外的逻辑,那么自己管理后备存储就变得至关重要。
答案 1 :(得分:6)
以前的语法在.NET 3.5之前是必需的,因此可以在较旧的代码中找到。
功能相同。
答案 2 :(得分:2)
public string Something {get;组; } 只是空手而归。它在背景中与上面完全相同。
答案 3 :(得分:1)
使用第一种语法的一个很好的理由是与MVVM体系结构一起使用,其中属性绑定到前端元素。
类似的东西:
private string _something;
public string Something
{
get { return _something; }
set {
_something = value;
OnNotifyPropertyChanged("Something");
}
}
这会提醒你的前端它的绑定属性已被更改并且必须更新。
答案 4 :(得分:0)
seconde方法是Auto-Implement Property
答案 5 :(得分:0)
在实例中引用自动属性与声明公共字段相同,后者会中断Encapsulation Principle。因此,如果您不在同一个类中访问它们,请使用自动属性。否则,使用成员(支持)字段并从本地方法引用它,同时通过普通的.NET属性公开它们。
使用.NET 3.0添加自动属性作为语法糖,因此您不再需要支持类中未引用的字段。