Мне это нравится
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. Набрав prop
в VS и нажав клавишу Tab
, вы получите полный фрагмент для свойства чтения/записи.
[Изменить] Посмотрите также эту тему: Как вы присвоите С# Auto-Property значение по умолчанию?
[Еще одно изменение]. Если вы считаете, что это сделает его более читаемым, проверьте следующую ссылку: это фрагмент get/set, который будет генерировать свойство с необходимым полем поддержки и автоматически добавлять a #region
, чтобы свернуть код: Фрагменты в CodePlex (Омер ван Клотен). Загрузите его и проверьте фрагмент
Get+Set Property (prop)
.
В настоящее время нет. В настоящее время единственными параметрами являются установка этого в конструкторе или использование свойства с полем поддержки.
Однако вы можете использовать PostSharp, чтобы реализовать это через AOP довольно легко. (Хотя, я не считаю, что в настоящее время это вариант).