0Pricing
C# Academy · Lektion

Events: Publish/Subscribe, event-Schlüsselwort

Lernen Sie Publish/Subscribe mit Events: Deklarieren Sie ein event, fügen Sie Handler hinzu oder entfernen Sie sie, übergeben Sie Daten über EventArgs und lösen Sie Events nach dem OnX-Muster aus.

Events: Publish/Subscribe, event-Schlüsselwort ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.

Überblick über Events

Ziel: Veröffentlichen und abonnieren Sie mit Events.

  • Deklarieren Sie ein event beim Publisher.
  • Melden Sie sich mit += an und mit -= ab.
  • Lösen Sie das Event sicher im Publisher aus.
  • Übergeben Sie Daten mit EventArgs.

Grundlegende Event-Verwendung

Stellen Sie ein event bereit und ermöglichen Sie Listenern, sich anzumelden bzw. abzumelden. Nur der Publisher löst es aus.

using System;

public class Button
{
  public event EventHandler Click;

  public void SimulateClick()
  {
    // Safe raise: copy then invoke if not null (C# 6-safe)
    EventHandler h = Click;
    if (h != null) h(this, EventArgs.Empty);
  }
}

public class Program
{
  static void OnClick(object sender, EventArgs e)
  {
    Console.WriteLine("Clicked!");
  }

  public static void Main(string[] args)
  {
    Button b = new Button();
    b.Click += OnClick;    // subscribe
    b.SimulateClick();     // prints "Clicked!"

    b.Click -= OnClick;    // unsubscribe
    b.SimulateClick();     // no output
  }
}

Event mit Daten

Verwenden Sie EventArgs (oder EventHandler<TEventArgs>), um Abonnenten nützliche Daten zu übergeben.

using System;

// Data for the event
public sealed class PriceChangedEventArgs : EventArgs
{
  public decimal OldPrice { get; private set; }
  public decimal NewPrice { get; private set; }
  public PriceChangedEventArgs(decimal oldP, decimal newP)
  {
    OldPrice = oldP; NewPrice = newP;
  }
}

public sealed class Product
{
  private decimal _price;
  public event EventHandler<PriceChangedEventArgs> PriceChanged;

  public decimal Price
  {
    get { return _price; }
    set
    {
      if (value != _price)
      {
        decimal old = _price;
        _price = value;
        EventHandler<PriceChangedEventArgs> h = PriceChanged;
        if (h != null) h(this, new PriceChangedEventArgs(old, _price));
      }
    }
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Product p = new Product();
    p.PriceChanged += delegate(object s, PriceChangedEventArgs e)
    {
      Console.WriteLine("Price: " + e.OldPrice + " -> " + e.NewPrice);
    };
    p.Price = 10m;
    p.Price = 12m;
  }
}

Multicast und Lambdas

Events sind multicast: Mehrere Handler werden in der Reihenfolge ihrer Anmeldung ausgeführt. Verwenden Sie benannte oder anonyme Handler.

using System;

public class Alarm
{
  public event EventHandler Ring;

  public void Trigger()
  {
    EventHandler h = Ring;
    if (h != null) h(this, EventArgs.Empty);
  }
}

public class Program
{
  static void HandlerA(object s, EventArgs e) { Console.WriteLine("A"); }
  static void HandlerB(object s, EventArgs e) { Console.WriteLine("B"); }

  public static void Main(string[] args)
  {
    Alarm a = new Alarm();
    a.Ring += HandlerA;                           // named
    a.Ring += delegate(object s, EventArgs e) { Console.WriteLine("lambda"); }; // anon
    a.Ring += HandlerB;

    a.Trigger(); // prints A, lambda, B (multicast order)
  }
}

OnX-Auslösemuster

Verwenden Sie eine geschützte OnX-Methode, um Events auszulösen. Kopieren Sie den Delegaten in eine lokale Variable und prüfen Sie vor dem Aufruf auf null.

using System;

public class Ticker
{
  public event EventHandler Tick;

  protected virtual void OnTick()
  {
    EventHandler h = Tick;          // copy to local
    if (h != null) h(this, EventArgs.Empty);
  }

  public void RunOnce()
  {
    // do work...
    OnTick(); // raise via protected method
  }
}

public class Program
{
  static void Show(object s, EventArgs e) { Console.WriteLine("Tick!"); }

  public static void Main(string[] args)
  {
    Ticker t = new Ticker();
    t.Tick += Show;
    t.RunOnce();
  }
}

Event-Tipps und Fallstricke

Tipps:

  • Melden Sie sich immer ab ( -= ), wenn ein Abonnent nicht mehr benötigt wird.
  • Halten Sie Handler kurz; umfangreiche Arbeit sollte in eine Warteschlange gestellt werden.
  • Verwenden Sie EventArgs (oder eine Unterklasse), um Daten zu übergeben.
  • Nur der Publisher sollte das Event auslösen.

Rolle des Schlüsselworts event

Schnelltest: Welches C#-Schlüsselwort stellt einen Delegaten zum An- und Abmelden bereit und verhindert, dass externer Code ihn direkt aufruft?

Zusammenfassung

Zusammenfassung: Deklarieren Sie ein event, ermöglichen Sie Listenern das An- und Abmelden, übergeben Sie Daten mit EventArgs und lösen Sie das Event über eine geschützte OnX-Methode aus.

Häufig gestellte Fragen

Ist die Lektion „Events: Publish/Subscribe, event-Schlüsselwort“ kostenlos?

Ja — der vollständige Text von „Events: Publish/Subscribe, event-Schlüsselwort“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 3 Lektionen.

Was lerne ich in „Events: Publish/Subscribe, event-Schlüsselwort“?

Lernen Sie Publish/Subscribe mit Events: Deklarieren Sie ein event, fügen Sie Handler hinzu oder entfernen Sie sie, übergeben Sie Daten über EventArgs und lösen Sie Events nach dem OnX-Muster aus. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 3.

Wie lange dauert die Lektion „Events: Publish/Subscribe, event-Schlüsselwort“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. delegate, Action/Func, Closures
  2. Events: Publish/Subscribe, event-Schlüsselwort
  3. Event-Muster und Fallstricke (Speicherlecks)
← Zurück zu C# Academy