2009-08-25 9 views
7

Siempre he asignado controladores de eventos como este, guiados por la autocompletación de Intellisense.Diferencias en la asignación de controladores de eventos C#?

RangeSelector.RangeChanged += new EventHandler(RangeSelector_RangeChanged); 

Recientemente he notado que uno de mis colegas lo hace de esta manera.

RangeSelector.RangeChanged += RangeSelector_RangeChanged; 

Ambos métodos son sintácticamente correctos, se compilan y se comportan como se esperaba.

¿Cuáles son las diferencias, ventajas o desventajas de estos métodos? ¿Dan como resultado el mismo código IL o hay alguna diferencia sutil que debo tener en cuenta?

Respuesta

12

¿Cuáles son las diferencias, beneficios o desventajas de estos métodos.

El segundo método es más reciente, es decir, que sólo es compatible desde C# 2.0 (creo), que añade una conversión automática de un grupo método (es decir, un nombre de método) a un delegado. El compilador agrega así la llamada de constructor y el segundo método es simplemente azúcar sintáctico para el primero. Por favor, no hay otras diferencias entre los dos.

Dado que el segundo método hace lo mismo que el primero, con menos sintaxis, se debe preferir.

+1

Además, si cambia la firma caso, sólo se necesita cambiar el código en dos lugares, la declaración de evento, y el manejador en sí, pero no en donde asigne/desasigne el manejador. –

+2

+1, Sin embargo, en cuanto a "debería ser preferido", eso es cuestionable. Si escribir + = seguido de presionar el botón de tabulación dos veces generó la sintaxis más reciente, estaría de acuerdo. Actualmente, la forma más rápida de agregar un controlador de eventos es generar la sintaxis anterior con la ayuda de los IDE. – AnthonyWJones

+0

@Matthew Scharley: si utiliza el soporte de refactorización incorporado de Visual Studio, no tendrá que preocuparse por tales cosas. –

3

No hay diferencia, resulta en la misma IL.

Es solo una manera de decir lo mismo con menos código.

3

El resultado es el mismo en ambos casos. Pero en este último, el compilador de C# inferirá el tipo de EventHandler del código, por lo que le ahorrará unas pocas pulsaciones de tecla.

2

sí, compilador crea el mismo código IL en ambos casos, el segundo caso es sólo azúcar sintaxis

Cuestiones relacionadas