是否有任何属性默认值初始值设定项属性?

问题描述:

我需要这样的是否有任何属性默认值初始值设定项属性?

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

但我只需要属性。

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

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(由奥马尔面包车Kloeten)。下载并检查 Get+Set Property (prop)片段。

+0

我的问题是我的班级有太多的属性 – ebattulga 2009-11-01 17:11:16

+0

但是,这与属性的默认值有什么关系?如果你的班级是“一堆设置”类的班级,那么你需要有默认值。 – Groo 2009-11-01 17:18:46

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

但是,您可以使用PostSharp通过AOP很容易地实现此目的。 (虽然,我不相信这是目前的选择)。