C#3.0 auto

注意:这是在我开始使用C#时发布的。 凭借2014年的知识,我可以真正地说,自动属性是C#语言发生过的最好的事情之一。

我习惯使用私有和公共字段在C#中创建我的属性:

private string title;
public string Title
{
    get { return title;  }
    set { title = value;  }
}

现在,在.NET 3.0中,我们获得了自动属性:

public string Title { get; set; }

我知道这更多是一个哲学/主观的问题,但是有没有任何理由使用这些自动属性,除了为每个字段保存五行代码? 我个人的抱怨是,这些属性隐藏了我的东西,我不是黑魔法的忠实粉丝。

事实上,隐藏的专用字段甚至不会显示在调试器中,这是可以的,因为get / set函数什么都不做。 但是当我想实际实现一些getter / setter逻辑时,我必须使用私有/公共对。

我看到了保存大量代码(一对六行)而不失去稍后改变getter / setter逻辑的能力的好处,但是我可以通过简单地声明一个公共字段“公共字符串标题”来解决这个问题{get; 组; }块,从而甚至节省更多的代码。

那么,我在这里错过了什么? 为什么会有人真的想要使用自动属性?


我们一直在堆栈溢出中使用它们。

您也可能对“属性与公共变量”的讨论感兴趣。 恕我直言,这真的是这是一个反应,为此,这是伟大的。


是的,它只是保存代码。 当你有很多的阅读时,它更容易阅读。 他们写得更快,更容易维护。 保存代码总是一个很好的目标。

您可以设置不同的范围:

public string PropertyName { get; private set; }

所以只能在课堂内改变财产。 这并不是真正不变的,因为你仍然可以通过反射来访问私有设置器。

从C#6开始,您还可以创建真正的readonly属性 - 即不能在构造函数之外更改的不可变属性:

public string PropertyName { get; }

public MyClass() { this.PropertyName = "whatever"; }

在编译时将会变成:

readonly string pName;
public string PropertyName { get { return this.pName; } }

public MyClass() { this.pName = "whatever"; }

在拥有大量成员的不可变类中,这会节省大量的额外代码。


使用字段而不是属性的三大缺点是:

  • 你不能绑定到一个字段,而你可以绑定到一个属性
  • 如果你开始使用一个字段,你不能以后(很容易)将它们改为一个属性
  • 有些属性可以添加到您无法添加到字段的属性中
  • 链接地址: http://www.djcxy.com/p/51343.html

    上一篇: C# 3.0 auto

    下一篇: Have trivial properties ever saved your bacon?