【问题标题】:automatic property with default value [duplicate]具有默认值的自动属性[重复]
【发布时间】:2011-01-14 14:08:17
【问题描述】:

可能重复:
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

【问题讨论】:

标签: c#


【解决方案1】:

不,没有什么好的方法可以做到这一点 - 基本上你必须在构造函数中设置它,这并不令人愉快。

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

【讨论】:

  • +1 表示只读,构造函数除外。考虑到我想要实现的某种设计,我会为此而杀。
  • 我可以在 C# 5 中为此提出一个新属性吗? DefaultValueAttribute 将是完美的:)
  • @Dercsar:我不认为属性是这里的方法。我宁愿看到语言的变化。毕竟,它是一块语言语法糖。我非常怀疑我们会在 C# 5 中看到它。
  • “我最大的抱怨”是否有一个私人二传手为财产工作?
  • @hunter:不,因为那不是真正的只读。它在类中仍然是可写的......并且支持变量也将是可写的。除了其他任何事情之外,如果您希望 类能够改变值,那么拥有一个私有设置器通常是有意义的。您的代码应该能够轻松声明此属性不会更改。目前,您必须通过单独声明变量和 getter-only 属性来做到这一点:(
【解决方案2】:

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

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

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

【讨论】:

  • 我相信这是最好的解决方案
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    一句话:没有。

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

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

    【讨论】:

      【解决方案5】:

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

      我认为这是最好的:

      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 中)。

      【讨论】:

      • 但这不是自动属性
      • 在这种情况下,构造函数你唯一的选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 2011-03-21
      • 2013-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      相关资源
      最近更新 更多