2009-11-01 99 views
2

我需要這樣的是否有任何屬性默認值初始值設定項屬性?

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

但我只需要屬性。

回答

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(由奧馬爾麪包車Kloeten)。下載並檢查 Get+Set Property (prop)片段。

+0

我的問題是我的班級有太多的屬性 – ebattulga 2009-11-01 17:11:16

+0

但是,這與屬性的默認值有什麼關係?如果你的班級是「一堆設置」類的班級,那麼你需要有默認值。 – Groo 2009-11-01 17:18:46

0

當前不是。現在,唯一的選擇是在構造函數中設置它,或者使用帶有後臺字段的屬性。

但是,您可以使用PostSharp通過AOP很容易地實現此目的。 (雖然,我不相信這是目前的選擇)。