如何设置属性的属性的默认值?

时间:2009-08-15 13:21:25

标签: .net reflection attributes

我有一组属性,需要为它们提供默认值。当然,我可以在getter中执行以下操作:

 public string MyProp        {
        get { 
              if(!string.IsNulOrEmpty(_myProp))
                  return _myProp;
              else
                  return "Default";
            }

但我希望它看起来像

 [DefaultValue("Default")]
 public string Processes
 {
    get { return _processes; }

有没有一种很好的方法来处理属性?我花了一些时间来寻找一些属性或方法来做到这一点但却一无所获。

2 个答案:

答案 0 :(得分:2)

我会这样做:

private string processes = "default";

public string Processes
{
    ...
}

答案 1 :(得分:0)

除非使用PostSharp之类的后处理器,否则不能使用属性执行此操作。 DefaultValueAttribute用于通知PropertyGrid(或其他属性浏览器类型控件)该属性的默认值应该是什么,以便它们可以指示何时从该默认值更改它并将其重置为该默认值。

你应该做的是这样的事情:

 private const string _processDefault = "Default";
 private string _processDefault  = _processDefault Default;
 public string Process
 {
    get
    { 
       return _processDefault ;
    }
    set
    {
        if (String.IsNullOrEmpty(value))
        {
           value = _processDefault ;
        }

       _myProp = value;
    }
 }

如果您不希望在控件之外设置值,请将setter设为私有。

使用这种方法你仍然可以使用该属性,但是需要编写一些反射代码来获取它的值,你需要通过函数调用初始化私有_myProp变量,而不是像我一样内联所示。