Pregunta

En C#, ¿cuál es la diferencia (si la hay) entre estas dos líneas de código?

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 segundo?

¿Fue útil?

Solución

hice esto

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

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

Y luego ejecuté ildasm sobre el código.
El MSIL generado era exactamente el mismo.

Entonces, para responder a tu pregunta, sí, son lo mismo.
El compilador simplemente infiere que quieres someEvent += new EventHandler( Program_someEvent );
-- Puedes verlo creando el nuevo EventHandler objeto en ambos casos en el MSIL

Otros consejos

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

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

Un poco fuera de tema:

Podrías crear una instancia de un delegado (new EventHandler(MethodName)) y (si corresponde) reutilizar esa instancia.

¿No fue el new XYZEventHandler requería hasta C#2003 y se le permitía omitir el código redundante en C#2005?

Creo que la única forma de saberlo realmente sería observar el MSIL producido para el código.Suele ser una buena prueba de fuego.

Tengo preocupaciones curiosas de que de alguna manera pueda afectar a GC.Parece extraño que haya toda la sobrecarga de declarar el nuevo tipo de delegado si nunca fuera necesario hacerlo de esta manera, ¿sabes?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top