具有默认值的自动属性

Der*_*sár 20 c#

可能重复:
如何为C#Auto-Property提供默认值?

有没有什么好方法可以为自动属性提供默认值?

public int HowHigh { get; set; } // defaults to 0

如果没有在任何地方明确设置,我希望它是5.你知道一个简单的方法吗?例如,我可以在构造函数或其他东西中设置它,但这并不优雅.

更新:C#6得到了它:http://geekswithblogs.net/WinAZ/archive/2015/06/30/whatrsquos-new-in-c-6.0-auto-property-initializers.aspx

Jon*_*eet 13

不,没有任何好的方法 - 基本上你必须在构造函数中设置它,这是不愉快的.

像这样的自动属性有各种限制 - 我最大的抱怨是没有办法创建一个只读的自动属性,可以在构造函数中设置但不在其他地方(并由readonly字段支持).

  • 我可以在C#5中为此提出一个新属性吗?DefaultValueAttribute将是完美的:) (2认同)
  • @Dercsar:我不认为属性是这里的方式.我宁愿看到语言的变化.毕竟,它是一种*语言*语法糖.我非常怀疑我们会在C#5中看到它. (2认同)
  • @hunter:不,因为那不是真正的只读.它在类中仍然是可写的......并且后备变量也是可写的.除了其他任何东西,如果你*希望*类能够改变值,那么拥有私有的setter通常是有意义的.您的代码应该能够轻松声明此属性*不会*更改.目前你必须通过分别声明变量和一个getter-only属性来做到这一点:( (2认同)

Bro*_*ass 12

你可以做的最好是在构造函数中设置它,你不能在自动属性中进行更改,你需要一个支持字段,否则你自己实现setter/getter.

使用支持字段,您可以编写如下内容:

private int _howHigh = 0;
public int HowHigh { get {return _howHigh; }  set { _howHigh = value; } }
Run Code Online (Sandbox Code Playgroud)


Eri*_*son 11

如果类型的默认值不够,那么唯一的方法是通过构造函数.