Shortest way of writing a C# property?
有人告诉我你可以替换以下代码:
1 2 3 4 5 6 7 | private string name; public string Name { get; set; } |
并没有不良影响:
1 | public string Name; |
我认识到,第一个示例中的set-like属性与我删除它并将原始属性设置为
第二种方法不是属性,而是字段。应始终将属性用于面向公共的值的原因是,从字段转换为属性构成了一个破坏性的更改。使用属性允许您以后更改getter或setter的行为,而不破坏任何引用您的代码。
记住,代码
实际上等于
1 2 3 4 5 6 | private string foo; public string Foo { get { return foo; } set { foo = value; } } |
当您使用属性时,您可以更好地控制哪些属性具有。
1 2 3 4 5 6 7 | private string name; public string Name { get; set; } |
错了应该是
1 2 3 4 5 | public string Name { get; set; } |
或
1 2 3 4 5 6 7 | private string name; public string Name { get { return name;} set { this.name = value;} } |
有时,当您希望只在类U内设置变量时,可以使用
1 2 3 4 5 | public string Name { get; private set; } |
属性结合了字段和方法的各个方面。对于对象的用户,属性似乎是字段,访问属性需要完全相同的语法。对于类的实现者,属性是一个或两个代码块,表示get访问器和/或set访问器。读取属性时执行get访问器的代码块;为属性分配新值时执行set访问器的代码块。没有set访问器的属性被认为是只读的。没有get访问器的属性被视为只写。具有两个访问器的属性是读写的。
来源:http://msdn.microsoft.com/en-us/library/w86s7x04(v=vs.80).aspx
公共属性与公共实例变量不同。
这种差异也很重要。例如,如果使用数据绑定的ASP.NET控件(如DroDownListBox中的DataTextField),则如果将其设置为实例变量而不是公共属性,则会失败。
1 | public string Name { get; set; } |
MSDN:
A property is a member that provides a flexible mechanism to read, write, or compute the value of a private field. Properties can be used as if they are public data members, but they are actually special methods called accessors. This enables data to be accessed easily and still helps promote the safety and flexibility of methods.
编写属性的最短方法是使用自动getter和setter。
不过,这并不是您在问题中提出的问题,您已经用字段替换了具有支持字段的传统属性。
自动getter/setter如下所示:
我相信这项功能是在C 3中引入的。所以你必须瞄准这个,或者更高的目标,才能使用这些。
我认为最短的方法是使用自动实现的属性和一些关于它们的参考信息
在C 3.0和更高版本中,当属性访问器中不需要其他逻辑时,自动实现的属性使属性声明更加简洁。它们还允许客户机代码创建对象。当您如下面的示例所示声明属性时,编译器将创建一个私有的匿名支持字段,该字段只能通过属性的get和set访问器访问。
公共字符串名称get;set;