2009-02-15 6 views
66

Tome el código de abajo:C#: Diferencia entre '+ = anEvent' y '+ = new manejador de sucesos (anEvent)'

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

¿Cuál es la diferencia entre lo siguiente?

[object].[event] += anEvent; 

//and 

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

[ACTUALIZACIÓN]

Al parecer, no hay ninguna diferencia entre los dos ... el primero es simplemente azúcar sintáctico de este último.

+4

Una herramienta como ReSharper recomendará quitar el código superflua, ya que sólo añade ruido. –

+1

posible duplicación de [Controladores de eventos C#] (http://stackoverflow.com/questions/26877/c-sharp-event-handlers) – nawfal

+0

La primera línea solo puede ser comprendida por programadores experimentados de C#. La segunda línea puede ser entendida tanto por programadores experimentados de C# como por aquellos que son más nuevos en el lenguaje. –

Respuesta

76

No hay diferencia. En su primer ejemplo, el compilador deducirá automáticamente el delegado que le gustaría crear una instancia. En el segundo ejemplo, define explícitamente al delegado.

La inferencia del delegado se agregó en C# 2.0. Entonces, para los proyectos C# 1.0, el segundo ejemplo fue su única opción. Para los proyectos 2.0, el primer ejemplo que utiliza la inferencia es lo que preferiría usar y ver en la base de código, ya que es más conciso.

10

No creo que haya ninguna diferencia. El compilador transforma el primero en el segundo.

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

es simplemente azúcar sintáctica para -

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