event (Referencia de C#)

La palabra clave event se usa para declarar un evento en una clase de publicador.

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#.

Vea también