first commit
This commit is contained in:
commit
d47f1dc602
9 changed files with 1247 additions and 0 deletions
89
Code/CSharp/Vererbung-Heredity.md
Normal file
89
Code/CSharp/Vererbung-Heredity.md
Normal file
|
@ -0,0 +1,89 @@
|
|||
# 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.
|
Loading…
Add table
Add a link
Reference in a new issue