event (Referência de C#)event (C# Reference)

A palavra-chave event é usada para declarar um evento em uma classe publicadora.The event keyword is used to declare an event in a publisher class.

ExemploExample

O exemplo a seguir mostra como declarar e acionar um evento que usa o EventHandler como o tipo delegado subjacente.The following example shows how to declare and raise an event that uses EventHandler as the underlying delegate type. Para obter o exemplo de código completo, que também mostra como usar o tipo delegado EventHandler<TEventArgs> genérico e como assinar um evento e criar um método de manipulador de eventos, consulte Como publicar eventos em conformidade com as diretrizes do .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"));
    }
}

Os eventos são um tipo especial de delegado multicast que só podem ser invocados de dentro da classe ou struct em que eles são declarados (a classe publicadora).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). Se outras classes ou structs assinarem o evento, seus respectivos métodos de manipulador de eventos serão chamados quando a classe publicadora acionar o 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 obter mais informações e exemplos de código, consulte Eventos e Delegados.For more information and code examples, see Events and Delegates.

Os eventos podem ser marcados como public, private, protected, internal, protected internal ou private protected.Events can be marked as public, private, protected, internal, protected internal or private protected. Esses modificadores de acesso definem como os usuários da classe podem acessar o evento.These access modifiers define how users of the class can access the event. Para obter mais informações, consulte Modificadores de acesso.For more information, see Access Modifiers.

Palavras-chave e eventosKeywords and Events

As palavras-chave a seguir aplicam-se a eventos.The following keywords apply to events.

Palavra-chaveKeyword DescriçãoDescription Para obter mais informaçõesFor more information
staticstatic Torna o evento disponível para chamadores a qualquer momento, mesmo se não existir nenhuma instância da classe.Makes the event available to callers at any time, even if no instance of the class exists. Classes static e membros de classes staticStatic Classes and Static Class Members
virtualvirtual Permite que classes derivadas substituam o comportamento do evento, usando a palavra-chave override.Allows derived classes to override the event behavior by using the override keyword. HerançaInheritance
sealedsealed Especifica que, para classes derivadas, o evento não é mais virtual.Specifies that for derived classes it is no longer virtual.
abstractabstract O compilador não gerará mais os blocos de acessador de evento add e remove, portanto, as classes derivadas devem fornecer sua própria implementação.The compiler will not generate the add and remove event accessor blocks and therefore derived classes must provide their own implementation.

Um evento pode ser declarado como um evento estático, usando apalavra-chave static.An event may be declared as a static event by using the static keyword. Isso torna o evento disponível para chamadores a qualquer momento, mesmo se não existir nenhuma instância da classe.This makes the event available to callers at any time, even if no instance of the class exists. Para obter mais informações, consulte Classes Estáticas e Membros de Classes Estáticas.For more information, see Static Classes and Static Class Members.

Um evento pode ser marcado como um evento virtual, usando a palavra-chave virtual.An event can be marked as a virtual event by using the virtual keyword. Isso habilita as classes derivadas a substituírem o comportamento do evento, usando a palavra-chave override.This enables derived classes to override the event behavior by using the override keyword. Para obter mais informações, consulte Herança.For more information, see Inheritance. Um evento que substitui um evento virtual também pode ser sealed, o que especifica que ele não é mais virtual para classes derivadas.An event overriding a virtual event can also be sealed, which specifies that for derived classes it is no longer virtual. Por fim, um evento pode ser declarado abstract, o que significa que o compilador não gerará os blocos de acessador de evento add e remove.Lastly, an event can be declared abstract, which means that the compiler will not generate the add and remove event accessor blocks. Portanto, classes derivadas devem fornecer sua própria implementação.Therefore derived classes must provide their own implementation.

Especificação da Linguagem C#C# Language Specification

Para obter mais informações, consulte a Especificação da linguagem C#.For more information, see the C# Language Specification. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.The language specification is the definitive source for C# syntax and usage.

Consulte tambémSee also