Я объявил универсальный обработчик событий
public delegate void EventHandler();
к которому я добавил метод расширения 'RaiseEvent':
public static void RaiseEvent(this EventHandler self) {
if (self != null) self.Invoke();
}
Когда я определяю событие, используя типичный синтаксис
public event EventHandler TypicalEvent;
тогда я могу без проблем использовать метод расширения:
TypicalEvent.RaiseEvent();
Но когда я определяю событие с явным синтаксисом добавления / удаления
private EventHandler _explicitEvent;
public event EventHandler ExplicitEvent {
add { _explicitEvent += value; }
remove { _explicitEvent -= value; }
}
тогда метод расширения не существует для события, определенного с явным синтаксисом добавления / удаления:
ExplicitEvent.RaiseEvent(); //RaiseEvent() does not exist on the event for some reason
И когда я наведусь на событие, чтобы увидеть причину, по которой оно говорит:
Событие ExplicitEvent может только
появляются в левой части + = или
- =
Почему событие, определенное с использованием типичного синтаксиса, должно отличаться от события, определенного с использованием явного синтаксиса добавления / удаления, и почему методы расширения не работают с последним?
РЕДАКТИРОВАТЬ: я нашел, что могу обойти это, используя непосредственный обработчик событий:
_explicitEvent.RaiseEvent();
Но я все еще не понимаю, почему я не могу использовать событие напрямую, как событие, определенное с использованием типичного синтаксиса. Может быть, кто-то может просветить меня.