2008-08-25 11 views
14

En C#, ¿cuál es la diferencia (si existe) entre estas dos líneas de código?Diferencia entre sucesos de cableado con y sin "nuevo"

tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick); 

y

tmrMain.Elapsed += tmrMain_Tick; 

Ambos parecen funcionar exactamente igual. ¿C = simplemente asume que te refieres a lo primero cuando escribes lo último?

+0

Bueno, ambos funcionan bien. Entonces, ¿por qué Visual Studio elige el primero sobre el último cuando crea automáticamente el código auxiliar del controlador de eventos? – Vaibhav

+0

Esa característica se remonta a antes de Visual Studio 2005, que introdujo la sintaxis más corta. – SLaks

Respuesta

25

lo hice

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

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

y luego corrió ildasm sobre el código.
El MSIL generado era exactamente el mismo.

Para responder a su pregunta, sí, son lo mismo.
El compilador está justo inferir que desea someEvent += new EventHandler(Program_someEvent);
- Se puede ver que la creación de la nueva EventHandler objeto en ambos casos en el MSIL

2

No creo que haya ninguna diferencia. Ciertamente, Resharper dice que la primera línea tiene código redundante.

-1

creo que la forma de saber realmente sería mirar el MSIL producido por el código .. tiende a ser una buena prueba de fuego ..

tengo preocupaciones divertidas que puede de alguna manera meterse con GC. Parece extraño que exista toda la sobrecarga de declarar el nuevo tipo de delegado si nunca hubiera sido necesario hacerlo de esta manera, ¿sabes?

0

¿No fue el new XYZEventHandler requerido hasta C# 2003, y se le permitió omitir el código redundante en C# 2005?

4

Solía ​​ser (.NET 1.x días) que la forma larga era la única forma de hacerlo. En ambos casos, está renovando un delegado para que apunte al método Program_someEvent.

2

Un poco offtopic:

Se podría crear una instancia de un delegado (new EventHandler(MethodName)) y (en su caso) reutilizar esa instancia.

Cuestiones relacionadas