💎 Lehrpfad 4: Architektur, xUnit & Cloud Master

C# 14: Delegates, Action/Func & Events

Verstehe funktionale Programmierung und lose Ereigniskopplung in C#: Generische Delegates (Action, Func) und das native Event-Muster.

📂 Dateien dieser Lerneinheit:
📄 Aufgabe.cs (Startercode) 🧪 TestAufgabe.cs (Tests) 💡 Musterloesung.cs (Lösung) 📖 README.md

💡 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);
📻 Didaktische Analogie: Der Radiosender

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

DelegateRückgabetypEinsatzzweck
ActionvoidAktionen, Callbacks, Konsumenten
FuncTResultTransformationen, Berechnungen, LINQ
PredicateboolFilterbedingungen (entspricht `Func`)
event EventHandlervoidEntkoppelte Systemereignisse mit Publisher-Schutz

⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)

⚠️ Memory Leaks durch vergessene Event-Abmeldung

Meldet sich ein langlebiger Service an einem kurzlebigen Objekt per `+=` an und vergisst `-=`, kann der Garbage Collector das Objekt nicht abräumen!

⚠️ Direktes Auslösen ohne ?.Invoke

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.

🎯 5. Aufgaben & Checkliste in Aufgabe.cs

💻 In Web-IDE öffnen & lösen →