Sono abbastanza soddisfatto 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 classi, avrei usato il modo standard in questo modo:
public event EventHandler<MyEventArgs> MyEvent;
Questo significava che qualsiasi cosa iscriversi all'evento avrebbe bisogno di un metodo come:
void HandleThatEvent(object sender, MyEventArgs args){...}
Che è bello, ma ho scoperto che raramente mi interessava il mittente, quindi ha reso gonfie un sacco di firme dei metodi.
Quindi sono passato a dichiarare i miei tipi di delegati
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, oppure compilarlo e aspettare che venga detto.
Quindi ora, invece, sto usando solo Action
, Action<T>
o qualsiasi modello adatto.
public event Action<SomeClass> MyEvent;
Così posso passare il mouse sopra l'evento e sapere quali parametri si aspettano.
La mia domanda, dopo tutto questo: esiste una best practice per la dichiarazione di eventi in C #? Dovrei tornare al modo EventHandler<T>
o è Action<T>
accettabile?