🏗️ Lehrpfad 2: Modernes OOP, Records & Interfaces

C# 07: Vererbung, Virtual/Override & Abstract

Klassenhierarchien in C#: Warum Methoden explizit virtual sein müssen, wie override Polymorphie ermöglicht und wie sealed Missbrauch verhindert.

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

💡 1. Expliziter Polymorphismus in C#

Im Gegensatz zu Java sind Methoden in C# standardmäßig NICHT virtuell. Um eine Methode überschreibbar zu machen, muss sie bewusst als `virtual` gekennzeichnet werden:

public abstract class Shape {
    public abstract double CalculateArea(); // Muss überschrieben werden

    public virtual void Draw() {            // Kann überschrieben werden
        Console.WriteLine("Zeichne Standard-Form");
    }
}

public class Circle(double radius) : Shape {
    public double Radius { get; } = radius;

    public override double CalculateArea() => Math.PI * Radius * Radius;

    public sealed override void Draw() {
        Console.WriteLine($"Zeichne Kreis mit Radius {Radius}");
    }
}
🔑 Didaktische Analogie: Das Patentschloss

In C# kann niemand heimlich dein Design ändern: Nur wenn du dem Schloss einen `virtual`-Stempel aufdrückst, darf eine Unterklasse ihren eigenen Schlüssel (`override`) anwenden!

⚡ 2. Quick-Cheat-Sheet

SchlüsselwortOrtBedeutung
abstractBasisklasse / MethodeKeine Implementierung; Unterklasse MUSS implementieren
virtualBasisklasseErlaubt Unterklassen das Überschreiben via override
overrideUnterklasseÜberschreibt polymorphe virtuelle Methode
sealedUnterklasse / KlasseVerbietet weiteres Überschreiben / Ableiten
baseUnterklasseGreift auf Implementierung der Elternklasse zu

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

⚠️ Method Hiding mit new statt override

Vergisst man override und schreibt versehentlich nur denselben Methodennamen, verbirgt man die Methode nur; über die Basisklassenreferenz wird trotzdem der alte Code ausgeführt!

⚠️ Sealed-Verletzung

Versucht man von einer als sealed markierten Klasse abzuleiten, bricht der Compiler sofort mit einem Fehler 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 →