есть ли атрибут инициализатора значения по умолчанию свойства? - PullRequest
2 голосов
/ 01 ноября 2009

Мне нужно вот так

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 ]

6 голосов
/ 01 ноября 2009

Нет, но вы можете легко инициализировать их в конструкторе без параметров.

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. Набрав prop в VS и нажав клавишу Tab, вы получите полный фрагмент для свойства чтения / записи.

[Редактировать] Проверьте также эту ветку: Как задать для свойства C # Auto-свойство значение по умолчанию?

[Еще одно редактирование] Если вы считаете, что это сделает его более читабельным, проверьте следующую ссылку: это фрагмент get / set, который сгенерирует свойство с необходимым полем поддержки и автоматически добавит #region блок вокруг него, чтобы свернуть код: Фрагменты в CodePlex (Омер ван Клоэтен). Загрузите его и проверьте фрагмент Get+Set Property (prop).

0 голосов
/ 01 ноября 2009

В настоящее время нет. Прямо сейчас, единственные варианты - установить это в конструкторе или использовать свойство с полем поддержки.

Однако, вы можете использовать PostSharp , чтобы реализовать это через AOP довольно легко. (Хотя я не верю, что в настоящее время это вариант).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...