event (Referência de 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 palavra-chave event
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.
Exemplo
O exemplo a seguir mostra como declarar e acionar um evento que usa o EventHandler como o tipo delegado subjacente. 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.
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 um tipo especial de delegado multicast que só podem ser invocados de dentro da classe (ou classes derivadas) ou struct em que eles são declarados (a classe publicadora). 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. Para obter mais informações e exemplos de código, consulte Eventos e Delegados.
Os eventos podem ser marcados 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.
Palavras-chave e eventos
As palavras-chave a seguir aplicam-se a eventos.
Palavra-chave | Descrição | Para obter mais informações |
---|---|---|
static | Torna o evento disponível para chamadores a qualquer momento, mesmo se não existir nenhuma instância da classe. | Classes static e membros de classes static |
virtual | Permite que classes derivadas substituam o comportamento do evento, usando a palavra-chave override. | Herança |
sealed | Especifica que, para classes derivadas, o evento não é mais virtual. | |
abstract | 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. |
Um evento pode ser declarado como um evento estático, usando apalavra-chave static. Isso torna o evento disponível para chamadores a qualquer momento, mesmo se não existir nenhuma instância da classe. 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 palavra-chave virtual. Isso habilita as classes derivadas a substituírem 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, o que especifica que ele não é mais virtual para classes derivadas. 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
. Portanto, 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 de C#.