Domanda

In C#, qual è la differenza (se esiste) tra queste due linee di codice?

tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);

e

tmrMain.Elapsed += tmrMain_Tick;

Entrambi sembrano funzionare esattamente lo stesso.Non C# solo supporre è da dire che la ex quando si digita l'ultima?

È stato utile?

Soluzione

Ho fatto questo

static void Hook1()
{
    someEvent += new EventHandler( Program_someEvent );
}

static void Hook2()
{
    someEvent += Program_someEvent;
}

E poi corse ildasm il codice.
Generata MSIL era esattamente lo stesso.

Quindi, per rispondere alla tua domanda, sì, sono la stessa cosa.
Il compilatore è solo la deduzione che si desidera someEvent += new EventHandler( Program_someEvent );
-- Si può vedere creazione di un nuovo EventHandler oggetto in entrambi i casi in MSIL

Altri suggerimenti

Ha usato per essere (.NET 1.x giorni) che la forma lunga era l'unico modo per farlo.In entrambi i casi si sono newing un delegato per scegliere la Program_someEvent metodo.

Io non credo che ci sia qualche differenza.Certamente resharper dice la prima riga è la ridondanza di codice.

Un po ' offtopic :

Si potrebbe creare un'istanza di un delegato (new EventHandler(MethodName)) e (se del caso) riutilizzo di tale istanza.

Non era il new XYZEventHandler richiedere fino a C#2003, e si era permesso di omettere la ridondanza di codice in C#2005?

Penso che l'unico modo per dire sarebbe quello di guardare il codice MSIL prodotto per il codice..Tende ad essere un buon test acido..

Ho divertenti preoccupazioni che potrebbe, in qualche modo, pasticcio con GC..Sembra strano che non ci sarebbe tutto l'overhead di dichiarare il nuovo delegato del tipo se non ha mai bisogno di essere fatto in questo modo, sai?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top