11

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

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

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

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

    public string Something { get; set; }

我并没有真正看到使用这些支持变量(_something)的好处,除非您当然对变量的设置有一些复杂的逻辑。

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

有人可以简单解释一下为什么人们选择做前者吗?是不是更“好习惯”?

非常感谢!

4

6 回答 6

10

我并没有真正看到使用这些支持变量(_something)的好处,除非您当然对变量的设置有一些复杂的逻辑。

如果您不使用它,则没有任何优势。使用第二种方法,仍然有一个支持变量,但是您让编译器完成添加它的工作。从 .NET 3.5 及更高版本开始,您当前的方法是完全有效的。

当然,一旦您需要引入额外的逻辑,那么自己管理后备存储就变得至关重要。

于 2012-10-04T21:28:19.937 回答
6

前一种语法在 .NET 3.5 之前是必需的,因此可以在较旧的代码中找到。

它在功能上是等效的。

于 2012-10-04T21:27:51.600 回答
3

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

就像是:

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

这会提醒您的前端它的绑定属性已更改并且必须更新。

于 2012-10-04T21:30:07.177 回答
2

公共字符串的东西{得到; 放; } 只是简写。在后台它正在做与上面完全相同的事情。

于 2012-10-04T21:28:12.147 回答
0

第二种方法是自动实现属性

于 2012-10-04T21:30:11.980 回答
0

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

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

于 2012-10-04T21:37:15.243 回答