Junior
Was sind Ereignisse in C#?
sobes.tech KI
Antwort von AI
Ereignisse in C# sind ein Mechanismus, der auf dem "Beobachter"-Muster (Observer Pattern) basiert und es einem Objekt (dem Herausgeber) ermöglicht, andere Objekte (Abonnenten) über das Eintreten einer Aktion oder eine Zustandsänderung zu informieren.
Hauptkomponenten:
- Herausgeber (Publisher): Klasse, die ein Ereignis deklariert.
- Ereignis (Event): Deklaration eines Ereignisses mit dem Schlüsselwort
event. Legt die Signatur der Methode fest, die von den Handlern verwendet wird. - Delegierter (Delegate): Typ, der die Signatur der Methoden definiert, die auf ein Ereignis abonnieren können. Häufig wird der vordefinierte Delegierte
EventHandleroderEventHandler<TEventArgs>verwendet. - Abonnent (Subscriber): Klasse oder Objekt, das sich auf das Ereignis des Herausgebers abonniert und eine Methode (Ereignishandler) bereitstellt, die beim Auslösen des Ereignisses aufgerufen wird.
- Ereignishandler (Event Handler): Methode des Abonnenten, die mit der Signatur des Delegierten des Ereignisses übereinstimmt.
Beispiel für Deklaration und Verwendung:
// Deklaration des Delegierten, falls nicht der vordefinierte EventHandler verwendet wird
public delegate void MyEventHandler(object sender, EventArgs e);
// Herausgeberklasse
public class Publisher
{
// Deklaration des Ereignisses mit dem Delegierten
public event MyEventHandler MyEvent;
public void DoSomething()
{
// Auslösen des Ereignisses (falls Abonnenten vorhanden)
OnMyEvent(EventArgs.Empty);
}
// Methode zum Auslösen des Ereignisses (schützt vor null)
protected virtual void OnMyEvent(EventArgs e)
{
MyEvent?.Invoke(this, e);
}
}
// Abonnentenklasse
public class Subscriber
{
public void Subscribe(Publisher publisher)
{
// Abonnement des Ereignisses
publisher.MyEvent += HandleMyEvent;
}
public void Unsubscribe(Publisher publisher)
{
// Abbestellen des Ereignisses
publisher.MyEvent -= HandleMyEvent;
}
// Ereignishandler
private void HandleMyEvent(object sender, EventArgs e)
{
Console.WriteLine("Ereignis wurde ausgelöst!");
}
}
// Beispiel für die Verwendung
public class Program
{
public static void Main(string[] args)
{
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
sub.Subscribe(pub); // Abonnement
pub.DoSomething(); // Ereignis auslösen
sub.Unsubscribe(pub); // Abbestellen (optional)
}
}
Ereignisse sorgen für eine lose Kopplung (loose coupling) zwischen Objekten, was ihnen ermöglicht, zu interagieren, ohne direkte Kenntnis von der Implementierung des anderen zu haben.