Einführung
In diesem Tutorial lernst du, was Vererbung ist und wie du Vererbung nutzen kannst, um weniger Code schreiben zu müssen und eine sauberere Struktur zu haben.
Vorbereitung
Öffne Visual Studio und erstelle eine neue Konsolenapplikation (Console Application). Nun wurde das Projekt erstellt und bereits die Program.cs Datei geöffnet. Wird die App mit dem grünen Startbutton (oder mit F5) gestartet öffnet sich ein Konsolenfenster und der Code in der Main Methode wird aufgerufen.
Auf der Suche nach weiteren C# Tutorials?
Los geht's!
Vererbung bedeutet, dass du von anderen Klassen ableitest und so alles von dieser Klasse auch verwenden kannst, ohne dass du den Code ein zweites Mal schreiben musst. So kannst du Teile, die du mehrmals verwendest in Basisklassen zusammenfassen und dann mit spezifischen Properties oder Methoden erweitern.
Hier ist ein Beispiel:
Wie man sieht, haben wir hier eine Schüler und eine Lehrer Klasse. Beide haben einen Nachnamen, Vornamen und eine Adresse. Der Lehrer hat zudem noch ein Fach, welches er unterrichtet, dafür hat ein Schüler das Schuljahr, indem er ist.
Hier könnte man eine PersonBase Klasse einführen, welche jene Properties beinhaltet, welche Lehrer und Schüler gemeinsam haben, das könnte dann etwa so aussehen:
Nun kann man Teacher und Student einfach von dieser PersonBase Klasse erben lassen. Das macht man, indem man nach dem Klassennamen " : PersonBase" schreibt. Nun kannst du alle Properties, welche bereits in der PersonBase Klasse vorhanden sind vom Schüler und Lehrer entfernen.
Da Student bzw. Teacher beide von PersonBase abgeleitet werden, haben sie auch alle Properties, die in PersonBase definiert sind. Das spart Code und schafft eine bessere Codequalität.
Nun fügen wir in die PersonBase Klasse eine Funktion hinzu:
Sowohl Student als auch Teacher haben jetzt auch die Funktion von der PersonBase Klasse, aber was ist, wenn wir beim Lehrer etwas anderes ausgeben wollen?
Dafür musst du die Methode der PersonBase Klasse zuerst mit "virtual" markieren, um zu zeigen, dass diese überschrieben werden kann.
Dann kannst du in der Teacher Klasse die Methode mit "override" überschreiben, das sieht so aus:
Manchmal möchte man aber die Methode der Basisklasse aufrufen und nur etwas zusätzlich dazu machen. Dafür kannst du "base.METHODE" verwenden. Base ist eine Variable, welche die Instanz der Basisklasse ist. Wenn wir also base.Write() ausführen, dann führen wir die Methode aus, welche in der PersonBase Klasse definiert ist. So können wir zusätzlich zum Code der Basisklasse spezifischen Code ausführen:
Natürlich kann man auch Constructor beim Vererben nutzen.
Fügen wir also folgenden Constructor in unserer Basisklasse hinzu:
Nun müssen wir bei Student und Teacher einen Constructor hinzufügen, der den Constructor der Basisklasse aufruft.
Schreibe nach dem Constructor einfach " : base(PARAMETER)" und gib alle nötigen Parameter mit, um die Basisklasse zu initialisieren.
Der Constructor von Teacher nimmt hier als Parameter den vollen Namen und gibt ihn einfach an die Basisklasse weiter.
Der Constructor von Student nimmt hier als Parameter den Vor- und Nachnamen, fügt beide zusammen und gibt diesen String dann an die Basisklasse weiter. Natürlich ist das hier nur als Beispiel gedacht, denn wir fügen hier 2 Variablen zu einem einzigen String zusammen und teilen diesen dann wieder in unsere 2 Variablen auf.
Fügen wir hierzu einfach einen zweiten Constructor in unserer Basisklasse hinzu, welche den Vor- und Nachnamen getrennt nimmt:
Nun können wir den Constructor vom Student wiefolgt anpassen: