具有默认值的自动属性

时间:2011-01-14 14:08:18

标签: c#

  

可能重复:
  How do you give a C# Auto-Property a default value?

有没有很好的方法为自动属性提供默认值?

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

5 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:12)

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

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

private int _howHigh = 0;
public int HowHigh { get {return _howHigh; }  set { _howHigh = value; } }

答案 2 :(得分:11)

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

答案 3 :(得分:3)

总之:不。

自动属性是一个小技巧,只要你需要额外的东西(比如一个合理的默认值),你就应该恢复到支持字段的常规属性。

我是一名Resharper用户,它可以轻松实现从自动到支持的属性。

答案 4 :(得分:2)

构造函数不是您唯一的选择。

我认为这是最好的:

private int m_HowHigh = 5; 
public int HowHigh { 
    get { return m_HowHigh; }  
    set { m_HowHigh = value; } 
} 

我更喜欢可读性,而不是ctor()。

这不是你想要的:

[DefaultValue(5)]
public int HowHigh { get; set; }

参考:http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx#Y2248

因为这只是一种装饰而没有设定值(在C#4中)。