Sobes.tech
Junior — Middle

Hoe onderscheid je een delegate van een gebeurtenis en wat zijn hun belangrijkste verschillen?

sobes.tech AI

Antwoord van AI

In C# is een delegate een type dat een verwijzing naar een methode met een bepaalde handtekening vertegenwoordigt. Delegates maken het mogelijk om methoden indirect aan te roepen, door ze als parameters door te geven of voor latere oproep op te slaan.

Een gebeurtenis is een mechanisme gebaseerd op delegates dat wordt gebruikt om abonnees te informeren over het optreden van een actie of een verandering in de toestand. De gebeurtenis encapsuleert de delegate en beperkt de toegang daartoe: abonnees kunnen alleen handlers toevoegen of verwijderen, maar niet de gebeurtenis rechtstreeks aanroepen.

Belangrijkste verschillen:

  • Delegate is een type, de gebeurtenis is een lid van een klasse dat een delegate gebruikt.
  • Delegate kan direct worden aangeroepen, de gebeurtenis niet (het aanroepen van de gebeurtenis is alleen mogelijk binnen de klasse waar deze is gedeclareerd).
  • De gebeurtenis biedt encapsulatie en veiligheid, waardoor willekeurige aanroepen van handlers van buitenaf worden voorkomen.

Voorbeeld:

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

public class Process
{
    public event Notify ProcessCompleted; // gebeurtenis

    public void Start()
    {
        // ... uitvoeren van het proces
        OnProcessCompleted("Proces voltooid");
    }

    protected virtual void OnProcessCompleted(string msg)
    {
        ProcessCompleted?.Invoke(msg); // aanroepen van de gebeurtenis
    }
}

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