Delegados y Eventos en C#
Los delegados en C# son tipos seguros que representan referencias a métodos con una firma específica. Permiten pasar métodos como parámetros o almacenarlos como variables. Los eventos, por su parte, se basan en delegados y permiten implementar el patrón de suscripción y notificación, facilitando la comunicación entre componentes desacoplados.
Definir y usar un delegado
Un delegado se define especificando la firma que pueden tener los métodos asignados.
public delegate void SaludoDelegate(string nombre);
public void Saludar(string nombre) {
Console.WriteLine($"Hola, {nombre}!");
}
// Uso
SaludoDelegate delegado = Saludar;
delegado("Alice");
Aquí el delegado SaludoDelegate puede apuntar a cualquier método que reciba un string y
devuelva void.
Eventos basados en delegados
Los eventos permiten que una clase notifique a otras cuando ocurre algo. Internamente usan delegados para gestionar la lista de suscriptores.
public class Notificador {
public event SaludoDelegate AlSaludar;
public void EjecutarSaludo(string nombre) {
AlSaludar?.Invoke(nombre);
}
}
// Suscripción
var notificador = new Notificador();
notificador.AlSaludar += Saludar;
notificador.EjecutarSaludo("Bob");
Aquí varias funciones pueden suscribirse al evento AlSaludar.
Buenas Prácticas
Usa delegados para permitir flexibilidad al pasar métodos. Prefiere eventos para notificación y desacoplamiento entre componentes. Usa EventHandler o EventHandler<T> para mantener consistencia en eventos públicos. Desuscribe manejadores para evitar fugas de memoria en aplicaciones largas.