Как написать атрибут, который установит значение по умолчанию для авто-свойства - PullRequest
0 голосов
/ 02 февраля 2011

Я прочитал пост по настройке свойств по умолчанию через атрибут, который заканчивается DefaultValue для режима разработки или сериализации.

НО, есть способ написать Атрибут, который будет делать то, что эти постыrequire: установить для свойства значение по умолчанию.

Если есть способ - как начать писать такой атрибут?

Спасибо, L-

Ответы [ 2 ]

3 голосов
/ 02 февраля 2011

Вы не можете, в основном.

Вы можете установить значение по умолчанию в конструкторе.

Как оказалось, я реализовал что-то, что сделало это совсем недавно, но с использованием фабричной конструкции; Заводская проверка на [DefaultValue] и установка значения с помощью отражения. Но атрибуты не могут вызвать выполнение произвольного кода, если вы не используете перезаписывающее устройство, такое как PostSharp.

Если конструктор слишком далек от вас, вам придется использовать инициализатор поля и написать get / set напротив поля.

0 голосов
/ 06 февраля 2011

К сожалению, атрибуты - это просто метаданные , что означает, что они не могут запускаться или что-то делать самостоятельно.
Однако ничто не мешает вам написать метод расширения с именем, например SetDefaultValues, который считывает значения по умолчанию изАтрибуты и присваивает их свойствам.

В недавнем проекте я проделал аналогичную работу, и это оказалось хорошим решением, поскольку он сохранил все значения по умолчанию, определенные в декларативном стиле, в одномplace .

Есть интересная статья о CodeProject , посвященная различным стратегиям реализации инициализации на основе [DefaultValue] и сравнению их производительности.Я предлагаю вам проверить это.

...