event (Referencia de C#)event (C# Reference)

La palabra clave event se usa para declarar un evento en una clase de publicador.The event keyword is used to declare an event in a publisher class.

EjemploExample

En el ejemplo siguiente se muestra cómo declarar y generar un evento que usa EventHandler como el tipo de delegado subyacente.The following example shows how to declare and raise an event that uses EventHandler as the underlying delegate type. 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 Cómo: Publicar eventos que cumplan las directrices de .NET Framework.For the complete code example that also shows how to use the generic EventHandler<TEventArgs> delegate type and how to subscribe to an event and create an event handler method, see How to: Publish Events that Conform to .NET Framework Guidelines.

public class SampleEventArgs
{
    public SampleEventArgs(string s) { Text = s; }
    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 by using the () operator.
        if (SampleEvent != null)
            SampleEvent(this, new SampleEventArgs("Hello"));
    }
}

Los eventos son un tipo especial de delegado de multidifusión que solo se pueden invocar desde la clase o el struct en la que se declaran (la clase de publicador).Events are a special kind of multicast delegate that can only be invoked from within the class or struct where they are declared (the publisher class). 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.If other classes or structs subscribe to the event, their event handler methods will be called when the publisher class raises the event. Para más información y ejemplos de código, vea Eventos y Delegados.For more information and code examples, see Events and Delegates.

Las constantes pueden marcarse como public, private, protected, internal, protected internal o private protected.Events can be marked as public, private, protected, internal, protected internal or private protected. Estos modificadores de acceso definen cómo los usuarios de la clase pueden obtener acceso al evento.These access modifiers define how users of the class can access the event. Para obtener más información, vea Modificadores de acceso.For more information, see Access Modifiers.

Palabras clave y eventosKeywords and Events

Las palabras clave siguientes se aplican a eventos.The following keywords apply to events.

Palabra claveKeyword DESCRIPCIÓNDescription Para obtener más informaciónFor more information
staticstatic Hace que el evento esté disponible para los llamadores en cualquier momento, aunque no exista ninguna instancia de la clase.Makes the event available to callers at any time, even if no instance of the class exists. Clases estáticas y sus miembrosStatic Classes and Static Class Members
virtualvirtual Permite que las clases derivadas invaliden el comportamiento de eventos mediante la palabra clave override.Allows derived classes to override the event behavior by using the override keyword. HerenciaInheritance
sealedsealed Especifica que ya no es virtual para las clases derivadas.Specifies that for derived classes it is no longer virtual.
abstractabstract 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.The compiler will not generate the add and remove event accessor blocks and therefore derived classes must provide their own implementation.

Un evento puede declararse como evento estático mediante la palabra clave static.An event may be declared as a static event by using the static keyword. Esto hace que el evento esté disponible para los llamadores en cualquier momento, aunque no exista ninguna instancia de la clase.This makes the event available to callers at any time, even if no instance of the class exists. Para más información, vea Clases estáticas y sus miembros.For more information, see Static Classes and Static Class Members.

Un evento puede marcarse como virtual mediante la palabra clave virtual.An event can be marked as a virtual event by using the virtual keyword. Esto permite que las clases derivadas invaliden el comportamiento de eventos mediante la palabra clave override.This enables derived classes to override the event behavior by using the override keyword. Para obtener más información, vea Herencia.For more information, see Inheritance. Un evento que reemplaza un evento virtual también puede ser sealed, que especifica que ya no es virtual para las clases derivadas.An event overriding a virtual event can also be sealed, which specifies that for derived classes it is no longer virtual. 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.Lastly, an event can be declared abstract, which means that the compiler will not generate the add and remove event accessor blocks. Por tanto, las clases derivadas deben proporcionar una implementación propia.Therefore derived classes must provide their own implementation.

Especificación del lenguaje C#C# Language Specification

Para obtener más información, consulte la Especificación del lenguaje C#.For more information, see the C# Language Specification. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.The language specification is the definitive source for C# syntax and usage.

Vea tambiénSee also