2009-12-10 14 views
10

¿Cuál es la diferencia real, ventajas y desventajas, de crear un nuevo controlador de eventos, frente a asignarlo directamente al evento?Adjuntar controlador de eventos con controlador nuevo vs Asignarlo directamente

_gMonitor.CollectionChanged += new NotifyCollectionChangedEventHandler(OnCollectionChanged); 

vs

_gMonitor.CollectionChanged += OnCollectionChanged; 
+0

posible duplicado de [C#: diferencia entre '+ = anEvent' y '+ = new EventHandler (anEvent)'] (http://stackoverflow.com/questions/550703/c-difference-between-nevent-and- new-eventhandleranevent) – nawfal

Respuesta

10

En C# 2.0 y superiores, que son idénticos. En C# 1.2 (el que se envió con .NET 1.1), compila solo la primera sintaxis (con new) ;-p

La segunda sintaxis guarda pulsaciones de teclas, pero VS intellisense generalmente sugerirá la primera. En definitiva, hace muy poca diferencia. Generalmente uso la segunda sintaxis en muestras de código en línea, ¡simplemente porque evita pasar por el ancho de columna (angosto)!

+0

Creo que el primero crea problemas de pérdida de memoria, pero no puedo encontrar nada para probarlo. Pero me he enfrentado a tales problemas en pasado el servicio de Windows no se cerraba solo porque el 'timer.Tick + = new Handler_Tick (timer_TickMethod);' no era 'timer.Tick + = timer_TickMethod;' y la cancelación de suscripción no era útil por lo tanto con 'timer .Tick + = new Handler_Tick (timer_TickMethod); '. –

+0

@HarshBaid usted es incorrecto; compilan para follar exactamente lo mismo. Para información, la cancelación de delegados se basa en una coincidencia en MethodInfo y * instance *; no es necesario que sea la misma instancia de delegado real para anular la suscripción correctamente –

+0

¿qué tal '_Monitor.CollectionChanged - = OnCollectionChanged' o' _Monitor.CollectionChanged + = new NotifyCollectionChangedEventHandler (OnCollectionChanged) ', ¿funcionará con la primera opción? –

3

El compilador tiene suficiente información disponible para hacer new EventHandler efectivamente syntactic sugar.

Sabe que está adjuntando un controlador de eventos a un evento, ya que solo += y -= son válidos en este punto, por lo que no necesita decirle qué hacer.

Cuestiones relacionadas