Eventos — RexDac Academy

RexDac AcademyNotas técnicas · Ayuda tener algunos conocimientos previos
0%Notas publicadas leídas · en este dispositivo

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
}