event (Referencia de C#)
Un evento es un miembro que permite que un objeto desencadene notificaciones. Los usuarios de eventos pueden adjuntar código ejecutable para eventos proporcionando controladores de eventos. La palabra clave event
declara un evento. El evento es de tipo delegado. Cuando un objeto desencadena un evento, este invoca a todos los controladores de eventos suministrados. Los controladores de eventos son instancias delegadas que se agregan al evento y se ejecutan cuando se genera el evento. Los usuarios de eventos pueden agregar o quitar sus controladores de eventos en un evento.
Ejemplo
En el ejemplo siguiente se muestra cómo declarar y generar un evento que usa EventHandler como el tipo de delegado subyacente. Para obtener el código de ejemplo completo que también muestra cómo usar el tipo delegado EventHandler<TEventArgs> genérico y cómo suscribirse a un evento y crear un método de controlador de evento, vea Procedimiento para publicar eventos que cumplan las directrices de .NET.
public class SampleEventArgs
{
public SampleEventArgs(string text) { Text = text; }
public string Text { get; } // readonly
}
public class Publisher
{
// Declare the delegate (if using non-generic pattern).
public delegate void SampleEventHandler(object sender, SampleEventArgs e);
// Declare the event.
public event SampleEventHandler SampleEvent;
// Wrap the event in a protected virtual method
// to enable derived classes to raise the event.
protected virtual void RaiseSampleEvent()
{
// Raise the event in a thread-safe manner using the ?. operator.
SampleEvent?.Invoke(this, new SampleEventArgs("Hello"));
}
}
Los eventos son un tipo especial de delegado de multidifusión que solo se pueden invocar desde la clase (o clases derivadas) o el struct en el que se declaran (la clase de publicador). Si otras clases o structs se suscriben al evento, se llamará a sus métodos de controlador de eventos cuando la clase de publicador genera el evento. Para más información y ejemplos de código, vea Eventos y Delegados.
Las constantes pueden marcarse como public, private, protected, internal, protected internal o private protected. Estos modificadores de acceso definen cómo los usuarios de la clase pueden obtener acceso al evento. Para obtener más información, consulte Modificadores de acceso.
Palabras clave y eventos
Las palabras clave siguientes se aplican a eventos.
Palabra clave | Descripción | Para obtener más información |
---|---|---|
static | Hace que el evento esté disponible para los llamadores en cualquier momento, aunque no exista ninguna instancia de la clase. | Clases estáticas y sus miembros |
virtual | Permite que las clases derivadas invaliden el comportamiento de eventos mediante la palabra clave override. | Herencia |
sealed | Especifica que ya no es virtual para las clases derivadas. | |
abstract | El compilador no generará los bloques de descriptor de acceso de eventos add y remove , y por tanto, las clases deben proporcionar su propia implementación. |
Un evento puede declararse como evento estático mediante la palabra clave static. Esto hace que el evento esté disponible para los llamadores en cualquier momento, aunque no exista ninguna instancia de la clase. Para más información, vea Clases estáticas y sus miembros.
Un evento puede marcarse como virtual mediante la palabra clave virtual. Esto permite que las clases derivadas invaliden el comportamiento de eventos mediante la palabra clave override. Para obtener más información, vea Herencia. Un evento que reemplaza un evento virtual también puede ser sealed, que especifica que ya no es virtual para las clases derivadas. Por último, se puede declarar un evento como abstract, lo que significa que el compilador no generará los bloques de descriptor de acceso de eventos add
y remove
. Por tanto, las clases derivadas deben proporcionar una implementación propia.
Especificación del lenguaje C#
Para obtener más información, consulte la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.