【问题标题】:is there any property default value initializer attribute?是否有任何属性默认值初始值设定项属性?
【发布时间】:2010-12-12 01:49:36
【问题描述】:

我需要这样的

public class AA{
   public AA(){}
   [Default("hi")]
   public string value1{get;set}
   [Default(12)]
   public int value2{get;set;}
}

用法:

AA a=new AA();
print(a.value1);  //result: hi
print(a.value2);  //result: 12 

可以这样创作吗?

我知道另一种方式

Public class AA{
   public AA(){value1="hi";value2=12}
   ...
}

否则

AA a=new AA(){value1="hi",value2=12};

但我只需要属性。

【问题讨论】:

    标签: c# attributes custom-attributes


    【解决方案1】:

    不,但您可以在无参数构造函数中轻松初始化它们。

    public class AA
    {
       public AA()
       {
          // default values
          Value1 = "hi";
          Value2 = 12;
       }
    
       public string Value1 {get;set}
       public int Value2 {get;set;}
    }
    

    或者,不使用自动实现的属性,而是使用带有初始化为默认值的支持字段的实际属性。

    public class AA
    {
       private string _value1 = "hi";
       public string Value1
       { get { return _value1; } }
       { set { _value1 = value; } }
    
       private int _vaule2 = 12;
       public int Value2
       { get { return _value2; } }
       { set { _value2 = value; } }
    }
    

    使用 Visual Studio sn-ps 创建具有实际支持字段的属性并不是什么大问题。通过在 VS 中输入 prop 并点击 Tab 键,您可以获得读/写属性的完整 sn-p。

    [编辑]也可以查看这个帖子:How do you give a C# Auto-Property a default value?

    [又一次编辑]如果您认为这会使其更具可读性,请检查以下链接:它是一个 get/set sn-p,它将生成具有必要支持字段的属性,并且自动在其周围添加一个#region 块以折叠代码:Snippets at CodePlex(作者 Omer van Kloeten)。下载并查看 Get+Set Property (prop)sn-p。

    【讨论】:

    • 但这与属性的默认值有什么关系呢?如果你的类是“bunch-of-settings”类型的类,那么你需要有默认值。
    【解决方案2】:

    目前没有。目前,唯一的选择是在构造函数中设置它,或者使用带有支持字段的属性。

    但是,您可以使用PostSharp 通过 AOP 相当轻松地实现这一点。 (虽然,我不认为这是目前的选择)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 2020-02-20
      • 2012-12-15
      相关资源
      最近更新 更多