C #: evento com explicitamente adicionar / remover! = Evento típico?
Eu declarei um manipulador genérico de eventos
public delegate void EventHandler();
para o qual eu adicionei o método de extensão 'RaiseEvent':
public static void RaiseEvent(this EventHandler self) {
if (self != null) self.Invoke();
}
Quando eu defino o evento usando a sintaxe típica
public event EventHandler TypicalEvent;
então eu posso chamar use o método de extensão sem problemas:
TypicalEvent.RaiseEvent();
Mas quando eu defino o evento com a sintaxe explícita de adicionar / remover
private EventHandler _explicitEvent;
public event EventHandler ExplicitEvent {
add { _explicitEvent += value; }
remove { _explicitEvent -= value; }
}
então o método de extensão não existe no evento definido com a sintaxe explícita de adicionar / remover:
ExplicitEvent.RaiseEvent(); //RaiseEvent() does not exist on the event for some reason
E quando eu passo para o evento para ver a razão diz:
O evento 'ExplicitEvent' só pode aparecer no lado esquerdo de + = ou - =
Por que um evento definido usando a sintaxe típica deve ser diferente de um evento definido usando a sintaxe explícita de adicionar / remover e por que os métodos de extensão não funcionam no último?
EDIT: eu encontrei posso contornar isso usando o manipulador de eventos privados diretamente:
_explicitEvent.RaiseEvent();
Mas ainda não entendi porque não posso usar o evento diretamente como o evento definido usando a sintaxe típica. Talvez alguém possa me iluminar.