Nivelul 4 — Clase
Evenimente
Note originale de SunDiaL · Vezi sursa în engleză
Un eveniment este un delegat cu protecție suplimentară a accesului: codul din exterior se poate abona sau dezabona, dar nu îl poate apela sau suprascrie.
Ai în continuare nevoie de un tip delegat pentru a declara un eveniment.
Exemple
Un emitent care folosește delegați
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 emitent care folosește evenimente propriu-zise
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
}