Sobes.tech
Junior — Middle

Kuidas eristada delegaati sündmusest ja millised on nende peamised erinevused?

sobes.tech AI

Vastus AI-lt

C# keeles on delegeet tüüp, mis esindab viidet meetodile kindla signatuuriga. Delegeedid võimaldavad meetodeid kaudselt kutsuda, edastades need parameetritena või salvestades hilisemaks kutsumiseks.

Sündmus on mehhanism, mis põhineb delegeetidel ja mida kasutatakse selleks, et teavitada tellijaid teatud tegevuse või oleku muutusest. Sündmus kapseldab delegeeti ja piirab sellele juurdepääsu: tellijad saavad ainult lisada või eemaldada töötlejaid, kuid ei saa sündmust otse kutsuda.

Peamised erinevused:

  • Delegeet on tüüp, sündmus on klassi liige, mis kasutab delegeeti.
  • Delegeeti saab otse kutsuda, sündmust mitte (sündmuse kutsumine on võimalik ainult klassi sees, kus see on deklareeritud).
  • Sündmus tagab kapseldamise ja turvalisuse, takistades juhuslikke väliseid kutsumisi.

Näide:

public delegate void Notify(string message); // delegeet

public class Process
{
    public event Notify ProcessCompleted; // sündmus

    public void Start()
    {
        // ... protsessi täitmine
        OnProcessCompleted("Protsess lõpetatud");
    }

    protected virtual void OnProcessCompleted(string msg)
    {
        ProcessCompleted?.Invoke(msg); // sündmuse kutsumine
    }
}

// Kasutamine:
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // tellimine
process.Start();