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