Duplicar posible:
Is there a downside to adding an anonymous empty delegate on event declaration?¿Está bien agregar siempre un controlador de eventos vacío?
El siguiente patrón es bastante común cuando se utilizan controladores de eventos (en C#):
public event Action handler;
…
// some method:
if(handler != null) handler();
¿Hay alguna desventajas de la asignación de un vacío delegado a este evento? Esto salvaría la condición if !=null
en todas partes, donde se dispara el evento. Por supuesto, esto solo aplica, cuando no podemos garantizar que el evento siempre tenga asignado un delegado adecuado.
public event Action handler;
…
// in constructor:
handler +=()=>{};
…
// some method:
handler();
Claro, hay un ligero golpe de rendimiento, pero hace que el código sea mucho más limpio. ¿Cuál es la mejor práctica en este caso? ¿Alguna desventaja técnica?
Desde mi punto de vista no es una buena práctica. Sí, guarda una verificación nula, pero unos meses más tarde, al inspeccionar el código para detectar errores o mantenimiento, el primer ejemplo demuestra mejor el propósito del código. – Steve
Se pone aún peor: sin protección, el 'handler' puede establecerse en nulo entre la comprobación de nulo y la invocación. Debes copiar el valor de 'handler' en una variable local y verificar _that_ para null. –
Su primer código está roto ya que no copia el valor de 'handler' en una variable local. – CodesInChaos