C# 为getter和setter使用backing变量

C# 为getter和setter使用backing变量,c#,.net,C#,.net,也许这是一个愚蠢的问题,但是,我对C#(更多来自Java背景)还是相当陌生的,并且对我所看到的关于属性的getter和setter的不同示例感到困惑 在某些情况下,代码如下所示: private string _something; public string Something { get { return _something; } set { _something = value; } } public string

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

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

    private string _something;
    public string Something
    {
        get { return _something; }
        set { _something = value; }
    }
    public string Something { get; set; }
但是,在其他示例中,他们不使用此支持memeber,因此更像这样:

    private string _something;
    public string Something
    {
        get { return _something; }
        set { _something = value; }
    }
    public string Something { get; set; }
我并不认为使用这些支持变量有什么好处,除非你对变量的设置有一些复杂的逻辑

我正在使用后一种方法编写我的程序,但我想检查一下我是否遗漏了任何内容

有人能简单地解释一下为什么人们选择前者吗?这更像是“良好实践”吗


非常感谢

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


它在功能上是等价的。

公共字符串Something{get;set;} 这只是一种速记。在后台,它正在做与上面完全相同的事情

我并不认为使用这些支持变量有什么好处,除非你对变量的设置有一些复杂的逻辑

如果你不使用它,就没有好处。对于第二种方法,仍然有一个支持变量,但是您让编译器来添加它。从.NET3.5及更高版本开始,您当前的方法是完全有效的


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

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

比如:

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

这将提醒前端其绑定属性已更改,必须更新

第二种方法是

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


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

我想后一个是原型定义,如java中的
接口
。@SuzanCioc Nope。这是一样的-但是支持字段是由C#编译器为您实现的。啊,不,我错了。这是一种新的语法,支持隐式变量。@Reed是的,我认为是正统的。其意义类似于Java:可以在子类中重写简单的getter或setter逻辑。如果你只需要
某个
成员,你就不能。那么让编译器添加它会有更大的开销吗?@AngelBrighteyes否-这和你自己写的完全一样。只是打字少了点。(另一个编译器生成的字段名)@AngelBrighteyes——这只是所谓“语法糖”的一个例子。代码较短,但在幕后的操作方式完全相同。@ReedCopsey谢谢你的提醒^ ^ ^啊,这可能正是我所看到的。我正在尝试使用MVVC架构构建我的应用程序,因此我使用了大量教程来掌握它。我怀疑这就是我困惑的根源。谢谢