Wie schreibt und registriert man bei C# einen Event Handler?

2 Antworten

Moin,

C# Events - Creating and Consuming Events in Your Application - YouTube

ich kann dir dieses Video ans Herz legen. Der Kerl erklärt alles in sehr verständlich und fasst auch zusammen.

Im Grunde musst du im Event nur den Trigger invoken und vorher das neue Event integriert haben.

LG

Woher ich das weiß:Berufserfahrung – 💻 Zertifizierter Sr. Cloud Engineer im IT-Consulting
Von Experte Dultus, UserMod Light bestätigt

Du brauchst eine Klasse, in der der Event Handler liegt:

class Cat
{
  public event EventHandler CryForMeal;

  public void IsHungry(bool hungry)
  {
    if (hungry)
    {
      OnCryForMeal(null);
    }
  }

  protected virtual void OnCryForMeal(EventArgs e)
  {
    var handler = CryForMeal;
    handler?.Invoke(this, e);
  }
}

Sobald ein Objekt dieser Klasse dieses Event triggert (OnIsHungry), werden die angehängten Listener darüber benachrichtigt. In meinem Beispiel übergebe ich kein extra EventArgs-Objekt. Normalerweise kannst du diesem aber noch zusätzliche Informationen zum Ereignis mitgeben.

Nun fehlt nur noch ein Listener-Objekt:

class Owner
{
  public Owner(Cat cat)
  {
    cat.CryForMeal += BringFood;
  }

  public void BringFood(object sender, EventArgs e)
  {
    Console.WriteLine("Bring food.");
  }
}

Dieses hängt sich an den Handler. Dafür muss allerdings auch die Signatur der Methode (BringFood) zu der des Delegate (EventHandler) passen. Bei Letzterem handelt es sich um ein Delegate aus der Standardbibliothek, welches folgendermaßen definiert ist:

public delegate void EventHandler(object sender, EventArgs e);

Anwendung:

var garfield = new Cat();
var jon = new Owner(garfield);
garfield.IsHungry(true);