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.

A referência da linguagem C# documenta a versão mais recentemente lançada da linguagem C#. Contém também documentação inicial para funcionalidades em versões preliminares públicas para a próxima versão da linguagem.

A documentação identifica qualquer funcionalidade introduzida pela primeira vez nas últimas três versões da língua ou em pré-visualizações públicas atuais.

Sugestão

Para saber quando uma funcionalidade foi introduzida pela primeira vez em C#, consulte o artigo sobre o histórico de versões da linguagem C#.

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 genérico EventHandler<TEventArgs> de delegado, como subscrever um evento e criar um método de gestor 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 multicast que só podes invocar dentro da classe (ou classes derivadas) ou struct onde os declaras (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.

Pode marcar eventos como public, private, protected, internal, protected internal, ou private protected. 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 de C# 14, podes declarar eventos como 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.

  • static: Torna o evento disponível para os chamadores a qualquer momento, mesmo que não exista nenhuma instância da classe. Para mais informações sobre eventos estáticos, consulte Classes Estáticas e Membros de Classe Estática.
  • virtual: Permite que classes derivadas sobreponham o comportamento do evento usando a palavra-chave de sobreposição . Para mais informações sobre eventos virtuais, consulte Herança.
  • sealed: Especifica que para classes derivadas já não é virtual.
  • abstract: O compilador não gera os add blocos de acesso do evento and remove e, por isso, as classes derivadas devem fornecer a sua própria implementação.

Use a static palavra-chave para declarar um evento como um evento estático. 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.

Use a virtual palavra-chave para marcar um evento como virtual. 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 a 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