Provocar un evento
Tres elementos interrelacionados proporcionan la funcionalidad de evento: una clase que proporciona los datos del evento, un delegado de evento y la clase que provoca el evento. .NET Framework tiene una convención para asignar nombre a las clases y métodos relacionados con los eventos. Si desea que la clase provoque un evento denominado EventName, necesita los siguientes elementos:
Una clase que guarde los datos del evento, denominada EventNameEventArgs. Esta clase debe derivar de System.EventArgs.
Un delegado para el evento, denominado EventNameEventHandler.
Una clase que provoca el evento. Esta clase debe proporcionar la declaración de evento (EventName) y un método que provoca el evento (OnEventName).
La clase de datos del evento y la clase de delegado de evento ya deben estar definidas en la biblioteca de clases .NET Framework o en una biblioteca de clases de terceros. En este caso, no es necesario que defina las clases. Por ejemplo, si el evento no utiliza datos personalizados, puede utilizar System.EventArgs para los datos de evento y System.EventHandler para el delegado.
Define un miembro de evento en la clase con la palabra clave event. Cuando el compilador encuentra una palabra clave event en la clase, crea un miembro privado como:
private EventNameHandler eh = null;
El compilador también crea los dos métodos públicos add_EventName
y remove_EventName
. Estos métodos son enlaces de eventos que permiten combinar o quitar delegados del delegado de evento eh
. El programador oculta los detalles.
Nota
En lenguajes que no sean C# y Visual Basic 2005, puede que el compilador no genere automáticamente el código correspondiente a un miembro de evento, y que se tengan que definir explícitamente los enlaces de eventos y el campo del delegado privado.
Cuando haya definido su implementación de evento, deberá determinar cuándo provocar el evento. El evento se provoca si se llama al método protegido OnEventName en la clase que definió el evento o en una clase derivada. El método OnEventName provoca el evento mediante la invocación de los delegados, pasando todos los datos específicos de evento. Los métodos delegados para el evento pueden realizar acciones para el evento o procesar los datos específicos de evento.
Nota
El método protegido OnEventName también permite que las clases derivadas reemplacen el evento sin asociarle un delegado. Una clase derivada siempre debe llamar al método OnEventName de la clase base para asegurarse de que los delegados registrados reciben el evento.
Cuando desee controlar eventos iniciados en otra clase, agregue métodos delegados al evento. Si no está familiarizado con el modelo de delegado de los eventos de .NET Framework, vea Eventos y delegados.
Vea también
Tareas
Cómo: Provocar y utilizar eventos
Cómo: Implementar eventos en una clase