2011-12-29 10 views
60

Recentemente mi è stato domandando se non v'è alcuna differenza significativa tra questo codice:personalizzato EventHandler EventHandler vs. <EventArgs>

public event EventHandler<MyEventArgs> SomeEvent; 

E questo:

public delegate void MyEventHandler(object sender, MyEventArgs e); 
public event MyEventHandler SomeEvent; 

Entrambi fare la stessa cosa e Non sono stato in grado di dire alcuna differenza. Sebbene abbia notato che la maggior parte delle classi di .NET Framework utilizza un delegato di gestore eventi personalizzato per i propri eventi. C'è una ragione specifica per questo?

risposta

67

Hai ragione; fanno la stessa cosa Quindi, probabilmente dovresti preferire il primo al secondo perché è più chiaro e richiede meno digitazione.

Il motivo per cui molte delle classi .NET Framework hanno i propri delegati di gestori di eventi personalizzati è perché sono stati scritti prima che i generici (che consentivano la sintassi abbreviata) fossero introdotti nella versione 2.0. Ad esempio, quasi tutte le librerie di WinForms sono state scritte prima dei generici e, in quei giorni, l'ultima forma era il solo modo di fare le cose.

+0

Grazie per la risposta. Mi ha reso le cose più chiare. – haiyyu

-1

Il secondo modo offre maggiore flessibilità e sicurezza del tipo. Ci sono meno metodi con firma corrispondente => meno spazio per un errore. Il delegato personalizzato consente di specificare esattamente i parametri di cui hai bisogno (o di non specificare nessuno) - nessun sender + setts cargo cult.

+1

Curioso perché questo è downvoted, sembra un vantaggio perfettamente ragionevole di gestori di eventi personalizzati. – Cerzi