💡 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!)
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
| Merkmal | Klasse (`class`) | Record (`record`) |
|---|---|---|
| Gleichheit (`==`) | Referenz-Gleichheit (Speicheradresse) | Werte-Gleichheit aller Felder |
| Standard-Mutierbarkeit | Veränderbar (mutable) | Unveränderlich (immutable init-only) |
| `with`-Ausdrücke | Nicht unterstützt | Nativ unterstützt |
| `ToString()` | Liefert Klassennamen | Formatiert alle Felder übersichtlich |
⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)
Enthält ein Record ein primitives Array `int[]`, vergleicht `==` nur die Referenz des Arrays, nicht dessen Inhalt! Nutze `ImmutableArray
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.