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
希望这可以帮助。