Могут ли атрибуты использоваться для автоматического уведомления об изменениях / регистрации? - PullRequest
2 голосов
/ 15 октября 2010

Есть ли способ сделать это:

class Example {
    [ChangeNotification]
    private int field;
}

Так, чтобы изменение значения "поля" автоматически регистрировалось, генерировало событие и т. Д.?

Ответы [ 4 ]

1 голос
/ 15 октября 2010

Нет, атрибуты зависят от типа, а не от экземпляра.

Но вы можете реализовать INotifyPropertyChanged на всех ваших объектах и ​​иметь некоторый класс для прослушивания всех событий и ведения журнала.

0 голосов
/ 15 октября 2010

да, это возможно с postsharp, используя OnFieldAccessAspect http://www.sharpcrafters.com/forum/Topic2244-4-1.aspx

0 голосов
/ 15 октября 2010

Вы можете сделать что-то подобное (по крайней мере, со свойством, но не с полем) через Аспектно-ориентированное программирование. Однако для этого необходимо использовать программу типа PostSharp ,который фактически переписывает встроенный код на основе атрибута.

Как правило, это используется для реализации INotifyPropertyChanged для свойства.Однако существуют правила перезаписи для ведения журналов и другие доступные функции.

Однако это не будет работать для поля.Это работает для свойства, так как переписчик может добавить код в метод набора свойств, но поле обрабатывается непосредственно CLR.

0 голосов
/ 15 октября 2010

На первый взгляд, я бы рекомендовал вам реализовать интерфейс INotifyPropertyChanged, так как Attribute зависит от типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...