Junior — Middle
¿Cómo distinguir un delegado de un evento y cuáles son sus principales diferencias?
sobes.tech AI
Respuesta de la IA
En C# el delegado es un tipo que representa una referencia a un método con una firma específica. Los delegados permiten llamar a métodos de forma indirecta, pasándolos como parámetros o almacenándolos para su uso posterior.
El evento es un mecanismo basado en delegados que se utiliza para notificar a los suscriptores sobre la ocurrencia de una acción o un cambio de estado. El evento encapsula el delegado y limita el acceso a él: los suscriptores solo pueden agregar o eliminar manejadores, pero no pueden invocar el evento directamente.
Diferencias principales:
- El delegado es un tipo, el evento es un miembro de clase que utiliza un delegado.
- El delegado puede ser invocado directamente, el evento no (la invocación del evento solo es posible dentro de la clase donde se declara).
- El evento proporciona encapsulación y seguridad, previniendo llamadas arbitrarias a los manejadores desde fuera.
Ejemplo:
public delegate void Notify(string message); // delegado
public class Process
{
public event Notify ProcessCompleted; // evento
public void Start()
{
// ... ejecución del proceso
OnProcessCompleted("Proceso completado");
}
protected virtual void OnProcessCompleted(string msg)
{
ProcessCompleted?.Invoke(msg); // invocación del evento
}
}
// Uso:
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // suscripción
process.Start();