Evenimente — RexDac Academy

RexDac AcademyNote tehnice · Ajută să ai câteva noțiuni de bază
0%Note publicate citite · pe acest dispozitiv

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
}