Junior
¿Qué son los eventos en C#?
sobes.tech AI
Respuesta de la IA
Los eventos en C# son un mecanismo basado en el patrón "observador" (Observer Pattern), que permite a un objeto (el emisor) notificar a otros objetos (los suscriptores) sobre la ocurrencia de una acción o cambio de estado.
Componentes principales:
- Emisor (Publisher): Clase que declara un evento.
- Evento (Event): Declaración de un evento usando la palabra clave
event. Define la firma del método que los manejadores utilizarán. - Delegado (Delegate): Tipo que define la firma de los métodos que pueden suscribirse a un evento. Frecuentemente se usa el delegado predefinido
EventHandleroEventHandler<TEventArgs>. - Suscriptor (Subscriber): Clase u objeto que se suscribe a un evento del emisor y proporciona un método (manejador del evento) que se llama cuando se dispara el evento.
- Manejador de evento (Event Handler): Método del suscriptor que coincide con la firma del delegado del evento.
Ejemplo de declaración y uso:
// Declaración del delegado, si no se usa el predefinido EventHandler
public delegate void MyEventHandler(object sender, EventArgs e);
// Clase emisor
public class Publisher
{
// Declaración del evento usando el delegado
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Disparar el evento (si hay suscriptores)
OnMyEvent(EventArgs.Empty);
}
// Método para disparar el evento (protegiéndolo de null)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Clase suscriptora
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Suscripción al evento
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Cancelar suscripción al evento
publisher.MyEvent -= HandleMyEvent;
}
// Manejador del evento
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("¡El evento se disparó!");
}
}
// Uso de ejemplo
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Suscripción
pub.DoSomething(); // Dispara el evento
sub.Unsubscribe(pub); // Cancelar suscripción (opcional)
}
}
Los eventos proporcionan un acoplamiento débil (loose coupling) entre objetos, permitiéndoles interactuar sin conocimiento directo de la implementación del otro.