есть ли атрибут инициализатора значения по умолчанию свойства?

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

Но мне нужен только атрибут.

Теги:
attributes
custom-attributes

2 ответа

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

[Изменить] Посмотрите также эту тему: Как вы присвоите С# Auto-Property значение по умолчанию?

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

  • 0
    Моя проблема в том, что у моего класса слишком много свойств
  • 0
    Но как это связано с наличием значений по умолчанию для свойств? Если ваш класс относится к классу «связка настроек», то вам нужно иметь значения по умолчанию.
0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню