I han declarado un controlador de eventos genéricoC#: evento con explicity add/remove! = ¿Evento típico?
public delegate void EventHandler();
a la que he añadido la extensión método 'RaiseEvent':
public static void RaiseEvent(this EventHandler self) {
if (self != null) self.Invoke();
}
Cuando definir el evento utilizando la sintaxis típica
public event EventHandler TypicalEvent;
luego puedo llamar usando el método de extensión sin problemas:
TypicalEvent.RaiseEvent();
Pero cuando defino el evento con complemento explícito/eliminar la 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 caso definido con el complemento explícito/eliminar sintaxis:
ExplicitEvent.RaiseEvent(); //RaiseEvent() does not exist on the event for some reason
Y cuando me cierne sobre el evento para ver el motivo dice:
El evento 'ExplicitEvent' solo puede aparecen en el lado izquierdo de + = o - =
¿Por qué un evento define utilizando la sintaxis típica ser diferente de un evento definido utilizando el complemento explícito/eliminar la sintaxis y por qué los métodos de extensión no funcionan en este último?
EDIT: He encontrado que puedo trabajar alrededor de ella utilizando el controlador de eventos privados directamente:
_explicitEvent.RaiseEvent();
Pero todavía no entiendo por qué no puedo utilizar el evento directamente como el evento definido usando la sintaxis típica. Tal vez alguien me puede iluminar.
Tampoco puede usar el método de extensión desde fuera de la clase. – IllidanS4