2009-02-15 8 views
66

Prendere il codice qui sotto:C#: Differenza tra '+ = anEvent' e '+ = new EventHandler (anEvent)'

private void anEvent(object sender, EventArgs e) { 
    //some code 
} 

Qual è la differenza tra i seguenti?

[object].[event] += anEvent; 

//and 

[object].[event] += new EventHandler(anEvent); 

[UPDATE]

A quanto pare, non v'è alcuna differenza tra i due ... il primo è solo zucchero sintattico di quest'ultimo.

+4

Uno strumento come ReSharper raccomanderà di rimuovere il codice superfluo dal momento che aggiunge solo rumore. –

+1

possibile duplicato di [gestori di eventi C#] (http://stackoverflow.com/questions/26877/c-sharp-event-handlers) – nawfal

+0

La prima riga può essere compresa solo dai programmatori C# esperti. La seconda riga può essere compresa sia dai programmatori C# esperti che da quelli più esperti della lingua. –

risposta

76

Non c'è differenza. Nel tuo primo esempio, il compilatore dedurrà automaticamente il delegato che vorresti istanziare. Nel secondo esempio, si definisce esplicitamente il delegato.

L'aggiunta del delegato è stata aggiunta in C# 2.0. Quindi per i progetti C# 1.0, il secondo esempio è stata la tua unica opzione. Per i progetti 2.0, il primo esempio che utilizza l'inferenza è ciò che preferirei utilizzare e vedere nella base di codice, poiché è più conciso.

10

Non penso che ci sia una differenza. Il compilatore trasforma il primo nel secondo.

14
[object].[event] += anEvent; 

è lo zucchero sintattico per -

[object].[event] += new EventHandler(anEvent);