为getter和setter使用支持变量

也许这是一个愚蠢的问题,但是,对于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之前是必需的,因此可以在旧代码中找到。

它在function上是等同的。

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

使用第一种语法的一个很好的理由是与MVVM体系结构一起使用,其中属性绑定到前端元素。

就像是:

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

这会提醒你的前端它的绑定属性已被更改,它必须更新。

seconde方法是自动实施属性

在实例中引用自动属性与声明公共字段相同,这会破坏封装原则 。 因此,如果您不在同一个类中访问它们,请使用自动属性。 否则,使用成员(支持)字段并从本地方法引用它,同时通过普通的.NET属性公开它们。

使用.NET 3.0添加自动属性作为语法糖,因此您不再需要支持类中未引用的字段。