C #: zdarzenie z explicity dodaj / usuń! = Typowe zdarzenie?
Zadeklarowałem rodzajową obsługę zdarzeń
public delegate void EventHandler();
do którego dodałem metodę rozszerzenia „RaiseEvent”:
public static void RaiseEvent(this EventHandler self) {
if (self != null) self.Invoke();
}
Kiedy zdefiniuję zdarzenie przy użyciu typowej składni
public event EventHandler TypicalEvent;
wtedy mogę bez problemów wywoływać metodę rozszerzenia:
TypicalEvent.RaiseEvent();
Ale kiedy zdefiniuję zdarzenie za pomocą jawnej składni dodawania / usuwania
private EventHandler _explicitEvent;
public event EventHandler ExplicitEvent {
add { _explicitEvent += value; }
remove { _explicitEvent -= value; }
}
następnie metoda rozszerzenia nie istnieje w zdarzeniu zdefiniowanym za pomocą jawnej składni dodawania / usuwania:
ExplicitEvent.RaiseEvent(); //RaiseEvent() does not exist on the event for some reason
A po najechaniu na zdarzenie, aby zobaczyć powód:
Zdarzenie „ExplicitEvent” może pojawić się tylko po lewej stronie + = lub - =
Dlaczego zdarzenie zdefiniowane przy użyciu typowej składni ma być inne niż zdarzenie zdefiniowane przy użyciu jawnej składni add / remove i dlaczego metody rozszerzenia nie działają na tym drugim?
EDYTUJ: Odkryłem, że mogę obejść to, używając bezpośrednio prywatnej procedury obsługi zdarzeń:
_explicitEvent.RaiseEvent();
Ale nadal nie rozumiem, dlaczego nie mogę użyć zdarzenia bezpośrednio, jak zdarzenia zdefiniowanego przy użyciu typowej składni. Może ktoś może mnie oświecić.