💡 1. Delegates & Event-Driven Architecture
Ein Event ist eine geschützte Veröffentlichung eines Delegates. Abonnenten können sich mit `+=` registrieren und mit `-=` abmelden:
public class StockTicker {
// Event-Deklaration mit EventHandler:
public event EventHandler? PriceChanged;
public void UpdatePrice(decimal newPrice) {
Console.WriteLine($"Neuer Börsenkurs: {newPrice}€");
// Atomares, sicheres Auslösen mit ?.:
PriceChanged?.Invoke(this, newPrice);
}
}
// Abonnieren:
var ticker = new StockTicker();
ticker.PriceChanged += (sender, preis) => {
Console.WriteLine($"[Alarm] Kurs geändert auf {preis}€!");
};
ticker.UpdatePrice(142.50m);
Der Radiosender strahlt sein Signal aus, egal ob 1 Hörer oder 10.000 Hörer eingeschaltet haben. Über Events melden sich Interessenten an (`+=`), ohne dass der Sender ihre Details kennen muss!
⚡ 2. Quick-Cheat-Sheet
| Delegate | Rückgabetyp | Einsatzzweck |
|---|---|---|
Action | void | Aktionen, Callbacks, Konsumenten |
Func | TResult | Transformationen, Berechnungen, LINQ |
Predicate | bool | Filterbedingungen (entspricht `Func |
event EventHandler | void | Entkoppelte Systemereignisse mit Publisher-Schutz |
⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)
Meldet sich ein langlebiger Service an einem kurzlebigen Objekt per `+=` an und vergisst `-=`, kann der Garbage Collector das Objekt nicht abräumen!
Schreibt man PriceChanged(this, preis); ohne Listener, stürzt das Programm mit einer `NullReferenceException` ab.
🧠 4. Diagnostischer Selbst-Check
Überprüfe dein Verständnis von Sprach-Features, Speicherverwaltung und Enterprise-Architektur, bevor du den Code in der Web-IDE schreibst.