2008-10-24 24 views

Respuesta

17

No puede. Los eventos solo exponen "agregar un controlador" y "eliminar un controlador": eso es todo. (De hecho, en el CLR también puede tener metadatos para asociar un método con "desencadenar el evento", pero el compilador de C# nunca genera eso.) Algunos editores de eventos pueden ofrecer medios adicionales para verificar si hay suscriptores o no. ves esos suscriptores) pero no es parte del patrón del evento en sí.

Consulte my article about events para obtener más información, o consulte la etiqueta events (que voy a agregar a esta pregunta).

1

¿Por qué necesita esto? ¿Cuál es el contexto? Tal vez haya una mejor manera de lograr el resultado
El botón es un objeto externo y lo que intenta hacer es verificar su lista interna de suscriptores sin preguntarlo. Está violando la encapsulación.
Siempre debe dejar que el objeto administre los suscriptores para los eventos que expone. Si quería que los clientes lo supieran, habría expuesto un método HasClientsRegistered. No entres en.

0

Creo que puedes si estás en la clase que plantea el evento.

Puede definir el controlador y enumerar cada uno.

p. Ej. Si el evento se define como

event System.EventHandler NewEvent; 

Luego, en el método de evento aumento puede crear que puede hacer ...

EventHandler handler = NewEvent; 
    if(handler != null) 
    { 
     handler(this, e); 
    } 

qué le dará el guía y de que se puede obtener la lista de invocación .

+0

Para comprobar si hay suscriptores, solo necesita "if (NewEvent! = Null)" - pero esto no lo obtiene realmente del evento, sino que lo obtiene del campo de respaldo. Mi respuesta asume que el OP está interesado en otros eventos, dado el ejemplo "button.Click". –

0

EventDescriptor e = TypeDescriptor.GetEvents (yourObject) .Find ("yourEventName", true);

Cuestiones relacionadas