Accesar al método manejador de un evento

20/01/2010 - 03:50 por Gina Solís | Informe spam
Si tengo un evento E con un manejador asignado.

Cómo puedo obtener el método asignado, digamos en una variable ? Se puede?
 

Leer las respuestas

#1 Alberto Poblacion
20/01/2010 - 10:23 | Informe spam
"Gina Solís" <GS> wrote in message
news:%
Si tengo un evento E con un manejador asignado.

Cómo puedo obtener el método asignado, digamos en una variable ? Se
puede?



Salvo algunos casos muy particulares, no se puede hacer. Desde fuera de
la clase que expone el evento, éste consiste en un par de funciones:
ElEvento_Add y ElEvento_Remove. A no ser que decompiles e interpretes el
código IL de dichas funciones, no hay forma de encontrar el delegado
correspondiente al evento; es más, aunque usualmente se usa un delegado, no
existe el requisito formal de que dicho delegado exista, y puede haber
clases que implementen eventos sin usar delegados (por ejemplo, el Click de
la clase Button no usa directamente un delegado para conectar el evento).

Si en tu caso particular sabes con certeza que la clase sí que utiliza
un delegado para definir el evento, y sabes el criterio de nomenclatura
usado para nombrar el delegado, puedes extraerlo mediante Reflection, y a
continuación llamar a su método GetInvocationList para obtener la lista de
métodos (podría haber más de uno) asignados al evento.

Tienes algo de código que te puede servir de inspiración (aunque no es
exactamente lo que buscas) aqui:
http://blogs.interakting.co.uk/stev...gates.aspx
Y aquí:
http://www.thekua.com/atwork/2007/0...work-in-c/

Preguntas similares