C #: evento con explicidad agregar / eliminar! = Evento típico?
He declarado un controlador de eventos genérico.
public delegate void EventHandler();
A la que he añadido el método de extensión 'RaiseEvent':
public static void RaiseEvent(this EventHandler self) {
if (self != null) self.Invoke();
}
Cuando defino el evento usando la sintaxis típica
public event EventHandler TypicalEvent;
entonces puedo llamar usar el método de extensión sin problemas:
TypicalEvent.RaiseEvent();
Pero cuando defino el evento con explícita agregar / eliminar sintaxis
private EventHandler _explicitEvent;
public event EventHandler ExplicitEvent {
add { _explicitEvent += value; }
remove { _explicitEvent -= value; }
}
entonces el método de extensión no existe en el evento definido con sintaxis explícita de agregar / eliminar:
ExplicitEvent.RaiseEvent(); //RaiseEvent() does not exist on the event for some reason
Y cuando me desplazo al evento para ver la razón, dice:
El evento 'ExplicitEvent' solo puede aparecer en el lado izquierdo de + = o - =
¿Por qué un evento definido con la sintaxis típica debe ser diferente de un evento definido con la sintaxis de agregar / eliminar explícita y por qué los métodos de extensión no funcionan en esta última?
EDITAR: encontré que puedo solucionarlo usando el controlador de eventos privados directamente:
_explicitEvent.RaiseEvent();
Pero aún no entiendo por qué no puedo usar el evento directamente como el evento definido usando la sintaxis típica. Tal vez alguien me puede iluminar.