Partilhar via


A event palavra-chave (referência C#)

Um evento é um membro que permite que um objeto acione notificações. Os usuários de eventos podem anexar código executável para eventos fornecendo manipuladores de eventos. A event palavra-chave declara um evento. O evento é do tipo delegado. Enquanto um objeto dispara um evento, o evento invoca todos os manipuladores de eventos fornecidos. Os manipuladores de eventos são instâncias delegadas adicionadas ao evento e executadas quando o evento é gerado. Os usuários de eventos podem adicionar ou remover seus manipuladores de eventos em um evento.

O exemplo a seguir mostra como declarar e gerar um evento que usa EventHandler como o tipo de delegado subjacente. Para obter o exemplo de código completo, consulte Como publicar eventos que estão em conformidade com as diretrizes do .NET. Esse exemplo demonstra o tipo de delegado genérico EventHandler<TEventArgs> , como se inscrever em um evento e criar um método manipulador de eventos,

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"));
    }
}

Os eventos são delegados de multicast que só podem ser invocados de dentro da classe (ou classes derivadas) ou struct onde são declarados (a classe publisher). Se outras classes ou estruturas se inscreverem no evento, seus métodos de manipulador de eventos serão chamados quando a classe publisher gerar o evento. Para obter mais informações e exemplos de código, consulte Eventos e delegados.

Os eventos podem ser marcados como , , , internalprotected, protected internal, ou private protected. privatepublic Esses modificadores de acesso definem como os usuários da classe podem acessar o evento. Para obter mais informações, consulte Modificadores de acesso.

A partir do C# 14, os eventos podem ser partial. Os eventos parciais têm uma declaração definidora e uma declaração de execução. A declaração definidora deve usar a sintaxe de campo. A declaração de execução deve declarar os manipuladores add e remove.

Palavras-chave e eventos

As palavras-chave a seguir se aplicam a eventos.

Palavra-chave Description Para obter mais informações
static Disponibiliza o evento para chamadores a qualquer momento, mesmo que nenhuma instância da classe exista. Classes estáticas e membros de classes estáticas
virtual Permite que classes derivadas substituam o comportamento do evento usando a palavra-chave override . Herança
sealed Especifica que, para classes derivadas, ele não é mais virtual.
abstract O compilador não gera os blocos de acesso a add eventos e remove e, portanto, as classes derivadas devem fornecer sua própria implementação.

Um evento pode ser declarado como um evento estático usando a palavra-chave estática . Os eventos estáticos estão disponíveis para chamadores a qualquer momento, mesmo que nenhuma instância da classe exista. Para obter mais informações, consulte Classes estáticas e membros de classes estáticas.

Um evento pode ser marcado como um evento virtual usando a virtual palavra-chave. As classes derivadas podem substituir o comportamento do evento usando a palavra-chave override . Para obter mais informações, consulte Herança. Um evento que substitui um evento virtual também pode ser sealed, que especifica que, para classes derivadas, ele não é mais virtual. Por fim, um evento pode ser declarado abstract, o que significa que o compilador não gera os blocos de acesso ao add evento e remove . Portanto, as classes derivadas devem fornecer sua própria implementação.

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso do C#.

Consulte também