Wiki/Code/CSharp/Vererbung-Heredity.md

90 lines
2.7 KiB
Markdown
Raw Permalink Normal View History

2023-12-20 16:30:40 +01:00
# Heredity
Die Vererbung ist wohl das mächtigste Tool für C#.\
Es bedeutet, dass man von Mutter klassen zu Tochter klassen alle Eigenschaften weitergeben kann.
In meinem Beispiel, werde ich dass aufzeigen anhand eines Zoo's mit Tieren und den Kategorien welche es da gibt.
## Mutter Klasse
Wir haben ein Tier, dieses kann ein Geräusch machen mit der Methode `MakeNoise()`.\
Wenn ich nun ein Säugetier erstellen will, macht dieses ja ein anderes Geräusch als ein Vogel.
Wichtig ist: Bei einer Mutter klasse schreiben wir immer da das Keyword `virtual` hin, wo wir die Möglichkeit haben wollen, in der Tochter klasse dies zu bearbeiten oder ganz zu verändern.
```
namespace Zoo.Animals
{
public abstract class Animal
{
public virtual string name { get; set; } = "animal";
public virtual string foodType { get; } = "Animalfood";
public virtual string habitat { get; } = "Cage";
public virtual void MakeNoise()
{
Debug.Write($"{this.name} makes a Noise: ");
}
}
}
```
Wir lassen jetzt das Säugetier von Animal erben.\
Dies geht, indem wir nach dem Klassennamen die zu erbende Klasse nach einem : einfügen. Hier mit: `Mammal : Animal`
```
namespace Zoo.Animals
{
public abstract class Mammal : Animal
{
}
}
```
Nun können wir einige der Properties und Methoden verändern bzw. überschreiben.\
Wir ändern `foodType` & `habitat` so wie die Methode `MakeNoise()`.\
Mit dem Keyword `override`.
```
namespace Zoo.Animals
{
public abstract class Mammal : Animal
{
public override string foodType => "Mammalfood";
public override string habitat => "Cage";
public override void MakeNoise()
{
Debug.WriteLine($"{this.name} makes a Noise: Mammal Noise");
}
}
}
```
Wenn wir uns den Code der Methode `MakeNoise()` von Animal anschauen sehen wir, dass wir ein `Debug.Write` verwenden dies könnten wir weiterverwenden, mit `this.base()`
```
namespace Zoo.Animals
{
public abstract class Mammal : Animal
{
public override string foodType => "Mammalfood";
public override string habitat => "Cage";
public override void MakeNoise()
{
this.MakeNoise();
Debug.WriteLine("Mammal Noise");
}
}
}
```
Mit diesem Code wird erst die Methode `MakeNoise()` von Animal aufgerufen. Was dazu führt, dass in die Konsole `{this.name} makes a Noise: ` geschriben wird.\
Im nächsten Schritt wird mit `Debug.WriteLine("Mamal Noise")` Mamal Noise auf der gleichen Zeile ausgegeben und eine neue Zeile begonnen.
Die Ausgabe wird `{this.name} makes a Noise: Mamal Noise` sein.
Es sind 2 Wege zum gleichen Ziel.