Junior — Middle
Ako odlíšiť delegáta od udalosti a aké sú ich hlavné rozdiely?
sobes.tech AI
Odpoveď od AI
V C# je delegát dátový typ, ktorý predstavuje odkaz na metódu s určitým podpisom. Delegáty umožňujú volanie metód nepriamo, odovzdávaním ich ako parametrov alebo ich ukladaním na neskoršie volanie.
Udalosť je mechanizmus založený na delegátoch, ktorý sa používa na oznámenie odberateľom o udalosti alebo zmene stavu. Udalosť enkapsuluje delegáta a obmedzuje prístup k nemu: odberatelia môžu len pridávať alebo odstraňovať spracovateľov, ale nemôžu volať udalosť priamo.
Hlavné rozdiely:
- Delegát je typ, udalosť je člen triedy, ktorý používa delegáta.
- Delegát môže byť volaný priamo, udalosť nie (volanie udalosti je možné iba v rámci triedy, kde je deklarovaná).
- Udalosť zabezpečuje enkapsuláciu a bezpečnosť, zabraňuje ľubovoľným volaniam spracovateľov zvonku.
Príklad:
public delegate void Notify(string message); // delegát
public class Process
{
public event Notify ProcessCompleted; // udalosť
public void Start()
{
// ... vykonanie procesu
OnProcessCompleted("Proces ukončený");
}
protected virtual void OnProcessCompleted(string msg)
{
ProcessCompleted?.Invoke(msg); // volanie udalosti
}
}
// Použitie:
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // prihlásenie
process.Start();