Eventos e representantes

Um evento é uma mensagem enviada por um objeto para sinalizar a ocorrência de uma ação.A ação pode ser causada por interação do usuário, como um clique do mouse, ou pode ser acionada por alguma outra lógica de programa.O objeto que gera o evento é chamado de emissor do evento.O objeto que captura o evento e responde a ele é chamado de receptor do evento.

Na comunicação de evento, a classe de emissor de evento não sabe qual objeto ou método receberá (identificador) os eventos que ela gera.O que é necessário é um intermediário (ou mecanismo do tipo ponteiro) entre a fonte e o receptor.O .NET Framework define um tipo especial (Delegate) que fornece a funcionalidade de um ponteiro de função.

Um representante é uma classe que pode conter uma referência a um método.Diferentemente de outras classes, uma classe de representante tem uma assinatura, e ela pode conter referências apenas para os métodos que correspondem à sua assinatura.Um representante, portanto, é equivalente a um ponteiro de função Type-Safe ou a um retorno de chamada.Enquanto os representantes têm outros usos, a discussão aqui enfoca a funcionalidade manipulação de eventos dos representantes.Uma declaração de representante é suficiente para definir uma classe de representante.A declaração fornece a assinatura do representante, e o Common Language Runtime fornece a implementação.O exemplo a seguir mostra uma declaração de representante de evento.

public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
Public Delegate Sub AlarmEventHandler(sender As Object, e As AlarmEventArgs)

A sintaxe é semelhante a de uma declaração de método; no entanto, a palavra-chave delegate informa o compilador que AlarmEventHandler é um tipo de representante.Por convenção, representantes de evento no .NET Framework têm dois parâmetros, a fonte que gera o evento e os dados para o evento.

Uma instância do representante AlarmEventHandler pode vincular a qualquer método que corresponda à sua assinatura, como o método AlarmRang da classe WakeMeUp mostrado no exemplo a seguir.

public class WakeMeUp 
{
    // AlarmRang has the same signature as AlarmEventHandler.
    public void AlarmRang(object sender, AlarmEventArgs e)
    {...};
    ...
}
Public Class WakeMeUp
   ' AlarmRang has the same signature as AlarmEventHandler.
   Public Sub AlarmRang(sender As Object, e As AlarmEventArgs)
      ...
   End Sub
   ...
End Class

Representante de evento personalizados são necessárias somente quando um evento gera dados de evento.Muitos eventos, incluindo alguns eventos da interface do usuário, como cliques do mouse, não geram dados do evento.Em tais situações, o representante do evento fornecido na biblioteca de classes para o evento sem-dados, System.EventHandler,é adequado.Sua declaração vem a seguir.

delegate void EventHandler(object sender, EventArgs e);
Public Delegate Sub EventHandler(sender As Object, e As EventArgs)

Representantes de evento são multicast, o que significa que eles podem conter referências a mais de um método de manipulação de eventos.Para obter detalhes, consulte:Delegate.Representantes permitem flexibilidade e controle de detalhes na manipulação de eventos.Um representante atua como um distribuidor de evento para a classe que gera o evento ao manter uma lista de manipuladores de eventos registrados para o evento.

Para obter detalhes sobre como usar representantes para fornecer a funcionalidade de evento no seu componente ou controle, consulte Gerando um evento.

Para obter uma visão geral do consumo de eventos em seus aplicativos, consulte Consumindo Eventos.

Consulte também

Tarefas

Como: Gerar e consumir eventos

Como: Conectar-se métodos de manipulador de eventos a eventos

Conceitos

Consumindo Eventos

Gerando um evento

Outros recursos

Tratamento e disparada de eventos