Junior — Middle
Hogyan különböztetjük meg a delegáltat az eseménytől, és mik a fő különbségek közöttük?
sobes.tech MI
Válasz az MI-től
C#-ban delegát egy olyan típus, amely egy adott szignatúrával rendelkező metódusra mutató hivatkozást képvisel. A delegátusok lehetővé teszik, hogy módszereket közvetve hívjunk meg, paraméterként átadva vagy későbbi hívásra tárolva őket.
Esemény egy delegátusokra épülő mechanizmus, amelyet arra használnak, hogy értesítsék a feliratkozókat egy esemény vagy állapotváltozás bekövetkezéséről. Az esemény beburkolja a delegátust, és korlátozza a hozzáférést: a feliratkozók csak hozzáadhatnak vagy eltávolíthatnak kezelőket, de nem hívhatják meg közvetlenül az eseményt.
Főbb különbségek:
- A delegátus egy típus, az esemény egy osztálytag, amely egy delegátust használ.
- A delegátus közvetlenül meghívható, az esemény nem (az esemény meghívása csak az osztályon belül lehetséges, ahol deklarálták).
- Az esemény inkapszulációt és biztonságot nyújt, megakadályozva a kezelők véletlenszerű külső hívását.
Példa:
public delegate void Notify(string message); // delegátus
public class Process
{
public event Notify ProcessCompleted; // esemény
public void Start()
{
// ... a folyamat végrehajtása
OnProcessCompleted("A folyamat befejeződött");
}
protected virtual void OnProcessCompleted(string msg)
{
ProcessCompleted?.Invoke(msg); // esemény meghívása
}
}
// Használat:
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // feliratkozás
process.Start();