Pregunta

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

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

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

¿Cuál es la desventaja de hacer el número 1?

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

¿Fue útil?

Solución

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

Cuando llamas "Onstuff -= New StuffEventHandler (this.handle);" el código de eliminación lo hace no compare el delegado que está eliminando por referencia:comprueba la igualdad comparando referencias a los métodos de destino que llamará el delegado y elimina los delegados coincidentes de "OnStuff".

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

Otros consejos

El número uno es solo una abreviatura que generará el mismo MSIL que el segundo, en el tipo de compilación mirará esto. Manejar e inferir el delegado para crear una instancia.Pero nunca debes darte de baja 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.

Tenía la impresión de que 2 es solo azúcar de sintaxis.Ellos deberían ser exactamente la misma cosa.

Si no recuerdo mal, la primera alternativa es simplemente azúcar sintáctica para la segunda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top