2009-08-25 16 views
7

Ho sempre assegnato gestori di eventi come questo, guidati dal completamento automatico di Intellisense.Differenze nell'assegnazione dei gestori di eventi C#?

RangeSelector.RangeChanged += new EventHandler(RangeSelector_RangeChanged); 

Ho notato di recente che uno dei miei colleghi lo fa in questo modo.

RangeSelector.RangeChanged += RangeSelector_RangeChanged; 

Entrambi i metodi sono sintatticamente corretti, compilano e si comportano come previsto.

Quali sono le differenze, i vantaggi o gli svantaggi di questi metodi. Risultano nello stesso codice IL o c'è qualche sottile differenza di cui ho bisogno di essere a conoscenza?

risposta

12

Quali sono le differenze, i vantaggi o gli svantaggi di questi metodi.

Il secondo metodo è più recente, cioè esso è supportato solo dal C# 2.0 (Credo), che aggiunge una conversione automatica da un gruppo metodo (cioè un nome metodo) a un delegato. La chiamata del costruttore è quindi aggiunta dal compilatore e il secondo metodo è solo zucchero sintattico per il primo.

Per questo motivo, non ci sono altre differenze tra i due.

Poiché il secondo metodo fa lo stesso del primo, con meno sintassi, dovrebbe essere preferito.

+1

Inoltre, se si modifica la firma dell'evento, è sufficiente modificare il codice in due punti, la dichiarazione di evento, e il gestore stesso, ma non ovunque si assegni/deassegni il gestore. –

+2

+1, Tuttavia per "dovrebbe essere preferibile" questo è discutibile. Se digitando + = seguito premendo due volte il tasto tab generava la sintassi più recente, sarei d'accordo. Attualmente il modo più rapido per aggiungere un gestore di eventi è generare la sintassi più vecchia con l'aiuto degli IDE. – AnthonyWJones

+0

@Matthew Scharley: se si utilizza il supporto del refactoring incorporato di Visual Studio, non ci si deve preoccupare di queste cose. –

3

Nessuna differenza, risulta nella stessa IL.

È solo un modo per dire la stessa cosa con meno codice.

3

Il risultato è lo stesso in entrambi i casi. Ma nel secondo il compilatore C# dedurrà il tipo EventHandler dal codice, risparmiando così alcuni tratti chiave.

2

sì, compilatore crea lo stesso codice IL in entrambi i casi, il secondo caso è solo zucchero sintassi

Problemi correlati