Добавить код в С# get/set of property без необходимости использования поля поддержки?
Вы знаете, как у вас может быть свойство, которое автоматически генерирует фоновое поле? Например, если я иду:
public String SomeProperty {get; set;}
Я знаю, что если я хочу добавить код к этому свойству, я должен создать поле поддержки так:
public string someProperty = string.Empty;
public string SomeProperty
{
get { return someProperty; }
set
{
someProperty = value;
DoSomething();
}
}
В принципе, я хочу знать... есть ли способ сделать это, но без создания поля поддержки? Например, я мог бы использовать его для запуска какого-либо события, которое возникает, когда свойство установлено. Я ищу что-то вроде этого:
public string SomeProperty
{
get;
set { this.OnSomeEvent; }
}
Но я знаю, что это вызовет ошибку компиляции, потому что get
нуждается в объявлении тела, если set
делает.
Я исследовал, и я не могу найти что-нибудь, но я подумал, что проверил бы, знает ли кто-нибудь.
Я предполагаю, что я действительно нахожусь в некотором роде, чтобы инициировать событие, когда свойство изменено, но без добавления лишнего беспорядка. Любые предложения?
Ответы
Ответ 1
Простой ответ - нет, вы не можете иметь его в обоих направлениях. от msdn:
В С# 3.0 и более поздних версиях автоматически реализованные свойства делают объявление свойств более кратким , когда в аксессуарах свойств не требуется дополнительная логика.
Ответ 2
Нет никаких решений для этого встроенного в фреймворк, и вы не можете изменять существующие типы посредством отражения (чтобы добавить логику во время выполнения). Единственный способ выполнить это, похоже, во время компиляции.
Существует продукт http://www.postsharp.net/, который может выполнить это (перехватить вызов свойства/метода), и, как представляется, есть бесплатная версия.