Junior
O que são eventos em C#?
sobes.tech IA
Resposta da IA
Os eventos em C# são um mecanismo baseado no padrão "observador" (Observer Pattern), que permite a um objeto (emissor) notificar outros objetos (assinantes) sobre a ocorrência de uma ação ou mudança de estado.
Componentes principais:
- Emissor (Publisher): Classe que declara um evento.
- Evento (Event): Declaração de um evento usando a palavra-chave
event. Define a assinatura do método que os manipuladores usarão. - Delegado (Delegate): Tipo que define a assinatura dos métodos que podem inscrever-se em um evento. Frequentemente usa-se o delegado predefinido
EventHandlerouEventHandler<TEventArgs>. - Assinante (Subscriber): Classe ou objeto que se inscreve em um evento do emissor e fornece um método (manipulador de evento) chamado quando o evento é disparado.
- Manipulador de evento (Event Handler): Método do assinante que corresponde à assinatura do delegado do evento.
Exemplo de declaração e uso:
// Declaração do delegado, se não usar o predefinido EventHandler
public delegate void MyEventHandler(object sender, EventArgs e);
// Classe emissora
public class Publisher
{
// Declaração do evento usando o delegado
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Disparar o evento (se houver assinantes)
OnMyEvent(EventArgs.Empty);
}
// Método para disparar o evento (protegido contra null)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Classe assinante
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Inscrição no evento
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Cancelar inscrição no evento
publisher.MyEvent -= HandleMyEvent;
}
// Manipulador de evento
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("O evento foi acionado!");
}
}
// Exemplo de uso
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Inscrição
pub.DoSomething(); // Dispara o evento
sub.Unsubscribe(pub); // Cancelar inscrição (opcional)
}
}
Eventos proporcionam um acoplamento fraco (loose coupling) entre objetos, permitindo que eles interajam sem conhecimento direto da implementação um do outro.