为getter和setter使用支持变量

时间:2012-10-04 21:26:05

标签: c# .net

也许这是一个愚蠢的问题,然而,我对C#(更多来自Java背景)很新,并且在我看到的有关属性的getter和setter的不同示例之间感到困惑。

在某些情况下,代码如下所示:

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

但是,在其他示例中,他们不使用此支持memeber,因此更像是这样:

    public string Something { get; set; }

我真的没有看到使用这些支持变量(_something)的好处,除非你有一些关于变量设置的复杂逻辑。

我正在使用后一种方法编写程序,但想检查一下我没有错过任何内容。

有人可以解释为什么人们选择做前者吗?这是更好的做法吗?

非常感谢!

6 个答案:

答案 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添加自动属性作为语法糖,因此您不再需要支持类中未引用的字段。