是否有任何属性默认值初始化属性?

时间:2009-11-01 17:05:37

标签: c# attributes custom-attributes

我需要这样

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};

但我只需要属性。

2 个答案:

答案 0 :(得分:6)

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

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片段创建具有实际支持字段的属性不是一个大问题。通过在VS中键入prop并点击Tab键,您可以获得读/写属性的完整代码段。

[编辑] 也请检查此主题:How do you give a C# Auto-Property a default value?

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

答案 1 :(得分:0)

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

但是,您可以使用PostSharp通过AOP轻松实现此功能。 (虽然,我不相信这是目前的选择)。