关于c#:具有默认值的自动属性


automatic property with default value

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
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


不,没有任何好的方法可以做到这一点——基本上你必须把它设置在构造器中,这是不愉快的。

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


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

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

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


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


总之:没有。

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

我是一个Resharper用户,它使从自动到支持的属性变得轻而易举。


构造函数不是您拥有的唯一选项。

我相信这是最好的:

1
2
3
4
5
private int m_HowHigh = 5;
public int HowHigh {
    get { return m_HowHigh; }  
    set { m_HowHigh = value; }
}

我更喜欢它用于可读性目的,而不是ctor()。

这不是你想要的:

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

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

因为这只是一个装饰,不设置值(在C 4中)。