C #: diferencia entre '+ = anEvent' y '+ = new EventHandler (anEvent)'

76

Toma el siguiente código:

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

¿Cuál es la diferencia entre los siguientes?

[object].[event] += anEvent;

//and

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

[ACTUALIZAR]

Aparentemente, no hay diferencia entre los dos ... el primero es solo azúcar sintáctico del segundo.

Andreas Grech
fuente
4
Una herramienta como Resharper le recomendará que elimine el código superfluo, ya que solo agrega ruido.
Chris Marisic
1
posible duplicado de los controladores de eventos
nawfal
La primera línea solo la pueden entender los programadores de C # experimentados. La segunda línea puede ser entendida tanto por programadores de C # experimentados como por aquellos que son más nuevos en el lenguaje.
CJ Dennis
@CJDennis: veo su punto, pero aquí hay un posible contraargumento: es mejor usar el paradigma que el recién llegado (casi siempre) encontrará para los eventos. De lo contrario, se confundirán de una manera diferente: se preguntarán por qué a veces ven código que dice "nuevo EventHandler" y otras veces no.
ToolmakerSteve

Respuestas:

81

No hay diferencia. En su primer ejemplo, el compilador inferirá automáticamente el delegado que le gustaría instanciar. En el segundo ejemplo, define explícitamente el delegado.

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

driis
fuente
18
[object].[event] += anEvent;

es solo azúcar sintáctico para ...

[object].[event] += new EventHandler(anEvent);
Martin Jonáš
fuente
11

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

Megacan
fuente