Los delegados y eventos en C# son mecanismos clave para lograr una comunicación eficaz entre objetos. Permiten implementar el patrón de diseño Observador, donde un objeto puede notificar a otros objetos sobre cambios o eventos importantes. A continuación, te mostraré cómo usar delegados y eventos para establecer esta comunicación.
Delegados
Un delegado en C# es un tipo que representa referencias a métodos. Permite almacenar una lista de métodos y llamar a esos métodos cuando sea necesario. Es fundamentalmente un puntero seguro a un método.
Sintaxis de un delegado en C#:
delegate tipoRetorno NombreDelegado(parametros);
Ejemplo de un delegado en C#:
delegate void MiDelegado(string mensaje);
// Definición de un método que coincida con la firma del delegado
void MostrarMensaje(string mensaje)
{
Console.WriteLine("Mensaje: " + mensaje);
}
// Creación de una instancia del delegado y asociación a un método
MiDelegado delegado = new MiDelegado(MostrarMensaje);
// Llamada al delegado
delegado("Hola, mundo!");
Eventos
Un evento en C# es una forma de proporcionar notificaciones a los objetos cuando ocurren ciertos sucesos dentro de otros objetos. Están basados en delegados y siguen el patrón de diseño de publicador-suscriptor.
Sintaxis de un evento en C#:
class ClaseQuePublicaEvento
{
public event NombreDelegado Evento;
public void AccionQueDisparaEvento()
{
Evento?.Invoke(parametros); // Invocación del evento
}
}
Ejemplo de un evento en C#:
class Publicador
{
public delegate void MiEventoHandler(string mensaje);
public event MiEventoHandler MiEvento;
public void NotificarEvento(string mensaje)
{
MiEvento?.Invoke(mensaje);
}
}
class Consumidor
{
public void Suscribirse(Publicador publicador)
{
publicador.MiEvento += MostrarMensaje;
}
private void MostrarMensaje(string mensaje)
{
Console.WriteLine("Mensaje recibido: " + mensaje);
}
}
Uso de Delegados y Eventos
Publicador publicador = new Publicador();
Consumidor consumidor = new Consumidor();
consumidor.Suscribirse(publicador);
publicador.NotificarEvento("Evento ocurrido!");
Los delegados y eventos son fundamentales para implementar un patrón de comunicación eficaz entre objetos y son ampliamente utilizados en aplicaciones C#.