Sobes.tech
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();