c# - handling - Diferencia entre eventos de cableado con y sin "nuevo"
eventhandler c# tutorial (6)
¿No era el new XYZEventHandler
requerido hasta C # 2003, y se le permitió omitir el código redundante en C # 2005?
En C #, ¿cuál es la diferencia (si existe) 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 último?
Creo que la única manera de decirlo sería mirar el MSIL producido para el código. Tiende a ser una buena prueba de ácido.
Tengo graciosas preocupaciones de que de alguna manera pueda 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?
No creo que haya ninguna diferencia. Ciertamente, Resharper dice que la primera línea tiene código redundante.
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.
hice esto
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.
Entonces, para responder a su pregunta, sí, son lo mismo.
El compilador solo está deduciendo que quiere someEvent += new EventHandler( Program_someEvent );
- Puede verlo creando el nuevo objeto EventHandler
en ambos casos en el MSIL
Un poco oftópico:
Puede instanciar un delegado (new EventHandler(MethodName))
y (si corresponde) reutilizar esa instancia.