🏗️ Lehrpfad 2: Modernes OOP, Records & Interfaces

C# 06: Records, Immutability & with-Expressions

Lerne C# Records kennen: Wertbasierte Gleichheit (Value Equality), Positional Records und nicht-destruktive Mutation mit with.

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

💡 1. Positional Records & with-Expressions

Ein Record ist ein idealer Container für unveränderliche Geschäftsdaten (DTOs, Events). Der Compiler generiert Wertgleichheit und `with`-Unterstützung automatisch:

// Positional Record (1 Zeile Code für vollständige Klasse!):
public record Order(int Id, string Customer, decimal Total, bool IsPaid);

// Verwendung:
var order1 = new Order(101, "Acme Corp", 500m, false);
var order2 = new Order(101, "Acme Corp", 500m, false);

// 1. Wertbasierte Gleichheit:
Console.WriteLine(order1 == order2); // TRUE! (obwohl zwei Objekte im Heap)

// 2. Nicht-destruktive Mutation mit 'with':
var bezahlteOrder = order1 with { IsPaid = true };
Console.WriteLine(order1.IsPaid);       // false (unverändert!)
Console.WriteLine(bezahlteOrder.IsPaid); // true (neue Kopie!)
📄 Didaktische Analogie: Das notarielle Dokument

Ein Vertrag darf nicht mit Tipp-Ex überschrieben werden. Wenn sich Klauseln ändern, fertigt man einen Nachtrag (Kopie) mit den neuen Klauseln an (`with`). Das Original bleibt unangetastet!

⚡ 2. Quick-Cheat-Sheet

MerkmalKlasse (`class`)Record (`record`)
Gleichheit (`==`)Referenz-Gleichheit (Speicheradresse)Werte-Gleichheit aller Felder
Standard-MutierbarkeitVeränderbar (mutable)Unveränderlich (immutable init-only)
`with`-AusdrückeNicht unterstütztNativ unterstützt
`ToString()`Liefert KlassennamenFormatiert alle Felder übersichtlich

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

⚠️ Shallow Equality bei Arrays in Records

Enthält ein Record ein primitives Array `int[]`, vergleicht `==` nur die Referenz des Arrays, nicht dessen Inhalt! Nutze `ImmutableArray`.

⚠️ Record Class vs Record Struct

Ein `record class` liegt auf dem Heap (Referenztyp), ein `record struct` auf dem Stack (Wertetyp).

🧠 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 →