This article has been localized into Dutch by the community.
Overerving
Een van de sleutelaspecten binnen Objectgeoriënteerd programmeren (OOP) is overerving, en C# is volledig op het concept van OOP gebouwd. Overerving geeft ons de mogelijkheid om klassen te creëren die bepaalde aspecten overerven van bovenliggende klassen (parent classes). Het volledig .NET framework is op dit concept gebouwd, wat als gevolg heeft dat alles aangezien wordt als een object. Zelfs een simpel getal is een instantie van een klasse die overerft van de System.Object klasse. Het framework helpt ons hierbij wel een beetje, zodat we een nummer direct kunnen toewijzen en niet telkens een instantie van bijvoorbeeld de integer klasse moeten aanmaken.
Dit onderwerp kan moeilijk begrijpbaar zijn, maar misschien dat een aantal voorbeelden helpen:
public class Animal
{
public void Greet()
{
Console.WriteLine("Hello, I'm some sort of animal!");
}
}
public class Dog : Animal
{
}
Eerst definiëren we de Animal klasse, die een simpele methode bevat die een begroeting weergeeft als output. Dan definiëren we de Dog klasse en met een dubbelpunt laten we C# weten dat deze klasse moet overerven van de Animal klasse. Het mooie hier aan is dat dit ook logisch is in de echte wereld want een hond is natuurlijk ook een dier. Laat ons deze klassen even uitproberen:
Animal animal = new Animal();
animal.Greet();
Dog dog = new Dog();
dog.Greet();
Als je dit voorbeeld uitvoert zal je merken dat ook de Dog klasse weet wat de methode Greet moet doen, ook als is deze methode niet binnen de klasse Dog gedefinieerd. Dit is zo omdat de klasse Dog overerft van de klasse Animal. Laat ons de code nog wat verder aanpassen zodat we weten welk dier ons begroet:
public class Animal
{
public virtual void Greet()
{
Console.WriteLine("Hello, I'm some sort of animal!");
}
}
public class Dog : Animal
{
public override void Greet()
{
Console.WriteLine("Hello, I'm a dog!");
}
}
Naast de toegevoegd methode binnen de Dog klasse zijn er twee dingen waar je op moet letten: aan de Greet methode in de Animal klasse werd het virtual keyword toegevoegd en aan de Greet methode in de Dog klasse werd het override keyword toegevoegd.
In C# mag je geen lid van een klasse overridden tenzij het lid als virtual aangeduid staat. Als je dat wil heb je nog steeds toegang tot de overgeërfde methode, zelfs als je die override, door gebruik te maken van het base keyword.
public override void Greet()
{
base.Greet();
Console.WriteLine("Yes I am - a dog!");
}
Methoden zijn niet de enige dingen die kunnen overgeërfd worden. In feite kunnen bijna alle leden van een klasse overgeërfd worden, inclusief velden en eigenschappen. Hou ook rekening met de visibility zoals we gezien hebben in een vorig hoofdstuk.
Overervering gebeurt niet enkel van één klasse op een andere, je kan een hele hiërarchie aan klassen opstellen die allemaal van elkaar overerven. Zo zou je bijvoorbeeld een Puppy klasse kunnen maken die overerft van de klasse Dog die op zijn beurt overerft van de klasse Animal. Wat niet kan is één klasse gelijktijdig laten overerven van meerdere andere klassen. Meervoudige overerving, zoals we dat noemen, wordt niet ondersteund in C#