C#
- Eventos (revisitado)
![]() |
Neste artigo volto a falar sobre eventos mostrando como criar um evento na linguagem C#. |
A abordagem da linguagem C# além de orientada a objetos também é orientada a eventos. Isto significa que enquanto atividades ocorrem, uma classe pode gerar eventos para indicar a ação que aconteceu, e passar informações relacionadas a outras classes que tenham aderido ao evento. Estes eventos podem ser utilizados para vários fins, incluindo a indicação do progresso de um processo de longa duração.
Desas forma, os eventos são usados para notificar ou sinalizar que um estado de um objeto foi alterado. Esta informação é útil para os clientes desse objeto (por exemplo, um clique do mouse ou uma tecla pressionada em um aplicativo GUI é um exemplo muito comum de eventos).
Em um cenário real, considere uma plataforma de mídia social como o Facebook. Sempre que atualizamos qualquer uma de nossas informações no Facebook, nossos amigos são notificados imediatamente. (Este é um exemplo muito comum do padrão de projeto Observer).
Então você pode assumir que quando você faz algumas mudanças em sua página do Facebook, internamente, alguns eventos são disparados para que seus amigos possam obter essas atualizações. Essas atualizações são recebidas apenas pelas pessoas que já estão na nossa lista de amigos (ou seja, as pessoas que aceitamos como nossos amigos).
No mundo da programação, dizemos que essas pessoas estão registradas em nossa lista de amigos. Se alguém não quiser obter atualizações, ele pode simplesmente cancelar o registro dessa lista de amigos. Portanto, os termos "registrar e cancelar o registro" estão associados a eventos,
Uma das principais vantagens do uso de eventos é que uma classe que publica um evento não precisa saber os detalhes dos assinantes em tempo de projeto. Como os eventos são baseadas em delegados (delegates), os assinantes só são adicionados quando o programa está sendo executado.
A seguir veremos como implementar um evento simples na linguagem C#.
Implementando um evento simples
A para implementar um evento vamos definir as etapas que devemos seguir.
Etapa 1: Crie uma classe de editor ou Publisher
# 1.1. Crie um delegate. (Primeiro, escolha um nome para o seu evento, digamos
TrabalhoFeito. Em seguida, crie um delegate com um nome como
TrabalhoFeitoEventHandler).
# 1.2. Crie o evento (usando a palavra-chave event) com base no delegate
# 1.3. Levante o evento. (O padrão standard requer que o método deve ser
marcado como virtual protegido. Além disso, o nome deve coincidir com o
nome do evento e ser prefixado com On).
Etapa 2: Crie uma classe de assinante ou Subscriber
# 2.1.Escreva um método de manipulador de eventos. O nome do método manipulador
de evento deve começar com On por convenção.
Agora vamos ao código...
Seguindo o roteiro definido crie um projeto do tipo Console Application e defina o código abaixo:
using System;
namespace Cshp_Eventos
{
//Etapa1-Criar um publisher ou editor
class Publisher
{
//Etapa1.1-Criar um delegate cujo nome seja
//"nomeDoEvento"+EventHandler
public delegate void TrabalhoFeitoEventHandler(object sender, EventArgs args);
//Etapa1.2-Criar um evento baseado no delegate
public event TrabalhoFeitoEventHandler TrabalhoFeito;
public void ProcessaUmTrabalho()
{
Console.WriteLine("Publisher/Editor : Um trabalho foi concluído");
//Etap1.3-Dispara o evento
OnTrabalhoFeito();
}
/*O parão standard requer que o método seja definido como protected virtual.
* O nome também precisa coincidir com o nome do evento e será prefixado com 'On'.*/
protected virtual void OnTrabalhoFeito()
{
if (TrabalhoFeito != null)
TrabalhoFeito(this, EventArgs.Empty);
}
}
//Etapa2-Criar um subscriber ou assinante
class Subscriber
{
//Tratamento do evento
public void OnTrabalhoFeitoEventHandler(object sender, EventArgs args)
{
Console.WriteLine("O Subscriber/Assinante foi notificado");
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("*** Demo de um evento simples ***");
//cria instancia do Editor e do Assinante
Publisher remetente = new Publisher();
Subscriber receptor = new Subscriber();
//Define o tratamento de evento
remetente.TrabalhoFeito += receptor.OnTrabalhoFeitoEventHandler;
//invoca o método
remetente.ProcessaUmTrabalho();
Console.ReadKey();
}
}
}
|
Executando o projeto iremos obter o seguinte resultado:
E estamos conversados...
Pegue
o projeto completo
aqui: Cshp_Eventos.zip
(disse Jesus) "Não crês tu que eu estou
no Pai, e que o Pai está em mim? As palavras que eu vos digo não as digo de mim
mesmo, mas o Pai, que está em mim, é quem faz as obras."
João 14:9
Referências: