instanciar eventos evento ejemplos deshabilitar delegados crear c# .net events delegates

deshabilitar - eventos en c# ejemplos



¿Es seguro agregar delegados a eventos con la palabra clave new? (4)

Una cosa que me preocupa es que descubrí dos formas de registrar delegados a eventos.

  1. OnStuff + = this.Handle;
  2. OnStuff + = new StuffEventHandler (this.Handle);

El primero está limpio, y tiene sentido hacer "OnStuff - = this.Handle"; para cancelar el registro del evento ... Pero en este último caso, ¿debería hacer "OnStuff - = new StuffEventHandler (this.Handle);"? Parece que no estoy eliminando nada, ya que incluyo otra referencia de StuffEventHandler. ¿El evento compara al delegado por referencia? Me preocupa que pueda comenzar un grupo de memoria desagradable aquí. ¿Consígueme? No tengo la referencia al "nuevo StuffEventHandler" que previamente registré.

¿Cuál es la desventaja de hacer # 1?

¿Cuál es el beneficio de hacer # 2?


El número uno es solo una taquigrafía que generará el mismo MSIL que el segundo, en el tipo de compilación verá esto. Manipule e infiera el delegado para crear instancias. Pero nunca deberías anular tu suscripción usando new.

Entonces no hay diferencia entre los 2, solo un poco de azúcar sintáctico para hacer nuestro código más limpio.


No necesita preocuparse por mantener una referencia al delegado registrado originalmente, y no comenzará un "desagradable grupo de memoria".

Cuando llamas "OnStuff - = new StuffEventHandler (this.Handle);" el código de eliminación no compara el delegado que está eliminando por referencia: comprueba la igualdad al comparar las referencias a los métodos de destino que el delegado llamará y elimina los delegados correspondientes de "OnStuff".

Por cierto, "OnStuff" en sí mismo es un objeto delegado (la palabra clave del evento que supongo que tiene en su declaración simplemente restringe la accesibilidad del delegado).


Si mal no recuerdo, la primera alternativa es meramente azúcar sintáctica para el segundo.


Tenía la impresión de que 2 es solo azúcar sintáctica. Deberían ser exactamente lo mismo.