Подтвердить что ты не робот

Добавить код в С# 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 делает.

Я исследовал, и я не могу найти что-нибудь, но я подумал, что проверил бы, знает ли кто-нибудь.

Я предполагаю, что я действительно нахожусь в некотором роде, чтобы инициировать событие, когда свойство изменено, но без добавления лишнего беспорядка. Любые предложения?

4b9b3361

Ответ 1

Простой ответ - нет, вы не можете иметь его в обоих направлениях. от msdn:

В С# 3.0 и более поздних версиях автоматически реализованные свойства делают объявление свойств более кратким , когда в аксессуарах свойств не требуется дополнительная логика.

Ответ 2

Нет никаких решений для этого встроенного в фреймворк, и вы не можете изменять существующие типы посредством отражения (чтобы добавить логику во время выполнения). Единственный способ выполнить это, похоже, во время компиляции.

Существует продукт http://www.postsharp.net/, который может выполнить это (перехватить вызов свойства/метода), и, как представляется, есть бесплатная версия.