Nivel 4 — Clases
Eventos
Notas originales de SunDiaL · Ver fuente en inglés
Un evento es un delegado con protección de acceso adicional: el código externo puede suscribirse o cancelar la suscripción, pero no invocarlo ni sobrescribirlo.
Sigue siendo necesario un tipo de delegado para declarar un evento.
Ejemplos
Un publicador que utiliza delegados
public delegate void Notify();
public class Publisher {
public Notify OnNotify; // anyone can assign freely
public void Trigger() {
OnNotify?.Invoke(); // invoke all subscribed methods
}
}
public void Main()
{
Publisher pub = new Publisher();
pub.OnNotify = null; // wipes all subscribers!
}
Un publicador que utiliza eventos propiamente dichos
public class Publisher {
public event Notify OnNotify; // external code can't call or assign directly
public void Trigger() {
OnNotify?.Invoke();
}
}
public void Main()
{
Publisher pub = new Publisher();
pub.OnNotify += () => Console.WriteLine("Listener 1");
pub.OnNotify -= SomeHandler;
pub.OnNotify(); // Can't invoke it
pub.OnNotify = null; // Can't overwrite it
}