C#中的自动属性是什么?它们的目的是什么?

有人可以提供一个非常简单的解释在C#自动属性,他们的目的,也许一些例子? 请尽量保持外行的态度。

在属性访问器中不需要额外的逻辑时使用自动属性。
声明看起来像这样:

public int SomeProperty {get; set;} 

他们只是语法糖,所以你不需要写下面更长的代码:

  private int _someField; public int SomeProperty { get { return _someField;} set { _someField = value;} } 

编辑:扩展一点,这些是用来使类中的私有variables更容易,但允许它们在课堂外可见(不能修改它们)

哦,另一个自动属性的好处是你可以在接口中使用它们 ! (其中不允许任何成员variables)

有了正常的属性,你可以做如下的事情:

 private string example; public string Example { get { return example; } set { example = value; } } 

自动属性允许您创build一些非常简洁的内容:

 public string Example { get; set; } 

所以如果你想创build一个只能在课堂上设置的领域,你可以这样做:

 public string Example { get; private set; } 

这将相当于:

 private string example; public string Example { get { return example; } private set { example = value; } } 

或者在Java中:

 private String example; public String getExample() { return example; } public void setExample(String value) { example = value; } 

编辑:@Paya也提醒我:

如果您问为什么要使用属性或自动属性,这是它背后的devise理念。

一个重要的devise原则是,你永远不会公开领域,而是总是通过属性访问所有的东西。 这是因为你永远不会知道什么时候访问一个字段,更重要的是什么时候设置。 现在,很多时候,设置或获取值时都不需要任何处理(例如范围检查)。 这就是自动属性创build的原因。 它们是创build财产的简单,单线的方式。 它的后备存储由编译器创build。

虽然这就是我为我的内部程序所做的,但对于公共使用(销售,开放源代码等)devise可能更重要。 如果您使用自动属性,然后决定您需要在set执行其他操作,则可以轻松地更改代码而不会破坏公共接口。

他们只是一个编程快捷方式,以节省程序员几个按键。 而不是input所有这些:

 private string _lastName; public string LastName { get { return _lastName; } set { _lastName = value; } } 

你可以input:

 public string LastName { get; set; } 

让编译器自动生成剩余的。

从自动实现的属性(C#编程指南) :

在C#3.0和更高版本中,当属性访问器中不需要额外的逻辑时,自动实现的属性使得属性声明更加简洁。 它们还使客户端代码能够创build对象。
当你声明一个属性时,编译器创build一个私有的匿名支持字段,只能通过属性的get和set访问器来访问。

 class Person { public string Name { get; set; } } 

我是C#的早期版本,为了使用属性,您将需要创build一个字段来保存该值(称为“备份存储”):

 private string _something; public string Prop { get { return _something; } } 

从C#3.0开始,这个需求不再需要,编译器会自动为你创build后备存储,所以不需要声明_something字段。

你可以在这里阅读更多关于这个问题: http : //msdn.microsoft.com/en-us/library/bb384054.aspx

希望这可以帮助。