Junior — Middle
Wie unterscheidet man einen Delegierten von einem Ereignis und was sind ihre Hauptunterschiede?
sobes.tech KI
Antwort von AI
In C# ist ein Delegat ein Typ, der eine Referenz auf eine Methode mit einer bestimmten Signatur darstellt. Delegaten ermöglichen es, Methoden indirekt aufzurufen, indem sie als Parameter übergeben oder für einen späteren Aufruf gespeichert werden.
Ein Ereignis ist ein Mechanismus, der auf Delegaten basiert und verwendet wird, um Abonnenten über das Eintreten einer Aktion oder eine Zustandsänderung zu informieren. Das Ereignis kapselt den Delegaten und beschränkt den Zugriff darauf: Abonnenten können nur Handler hinzufügen oder entfernen, aber das Ereignis nicht direkt aufrufen.
Hauptunterschiede:
- Delegat ist ein Typ, das Ereignis ist ein Klassenmitglied, das einen Delegaten verwendet.
- Delegaten können direkt aufgerufen werden, Ereignisse nicht (der Aufruf eines Ereignisses ist nur innerhalb der Klasse möglich, in der es deklariert wurde).
- Das Ereignis bietet Kapselung und Sicherheit, verhindert willkürliche Aufrufe von Handlern von außen.
Beispiel:
public delegate void Notify(string message); // Delegat
public class Process
{
public event Notify ProcessCompleted; // Ereignis
public void Start()
{
// ... Ausführung des Prozesses
OnProcessCompleted("Prozess abgeschlossen");
}
protected virtual void OnProcessCompleted(string msg)
{
ProcessCompleted?.Invoke(msg); // Aufruf des Ereignisses
}
}
// Verwendung:
var process = new Process();
process.ProcessCompleted += msg => Console.WriteLine(msg); // Abonnement
process.Start();