Sono abbastanza contento della mia comprensione del modello di eventi .NET. Penso che potrei fraintendere una piccola sfumatura del sistema.
Quando ho iniziato a inserire eventi nelle mie lezioni, avrei usato il modo standard in questo modo:
public event EventHandler<MyEventArgs> MyEvent;
Ciò significava che qualsiasi abbonamento all'evento avrebbe bisogno di un metodo come:
void HandleThatEvent(object sender, MyEventArgs args){...}
Il che è carino, ma ho scoperto che raramente mi interesserebbe il mittente, quindi ha gonfiato molte firme dei metodi.
Quindi sono passato a dichiarare i miei tipi di delegato
public delegate void MyEventHandler(SomeClass argument);
Che ha ridotto il disordine, ma mi ha lasciato un piccolo problema quando si trattava di scrivere gestori:
eventImplmentor.MyEvent += HandleThatEvent;
.
.
.
void HandleThatEvent(/*oh, um, what arguments does it take? Intellisense isn't telling me*/)
Quindi dovrei tornare alla dichiarazione del delegato e guardare e poi tornare indietro e scriverli, o compilarli e attendere che gli venga detto.
Quindi ora invece sto solo usando Action
, Action<T>
o qualunque modello si adatti.
public event Action<SomeClass> MyEvent;
In modo che possa passare il mouse sopra l'evento e sapere quali parametri si aspetta.
La mia domanda, dopo tutto: esiste una best practice per dichiarare eventi in C #? Devo tornare sulla EventHandler<T>
strada, o è Action<T>
accettabile?