Wat is polymorfisme?
Polymorfisme betekent letterlijk “veelvormigheid” en stelt een programma in staat om dezelfde interface of methode op verschillende manieren te implementeren voor verschillende klassen. Dus afhankelijk van het object dat de methode implementeert, zal de uitvoering anders zijn. Dit verhoogt de flexibiliteit, herbruikbaarheid en onderhoudbaarheid van code.
Polymorfisme in C# kan op drie manieren worden bereikt:
- Overloading: Meerdere methodes met dezelfde naam binnen dezelfde klasse, maar met verschillende parameters.
- Overriding: Een subklasse overschrijft een methode die al in een superklasse bestaat.
- Interface implementation: Een klasse implementeert een interface en definieert zijn eigen versie van de methode(s).
Casus
Een ontwikkelteam gebruikt een berichtenservice. Om verschillende typen berichten in een klasse te kunnen versturen wordt gebruik gemaakt van methode overloading.
Hoe zit polymorfisme in elkaar?
De drie vormen van polymorfisme worden hieronder uitgewerkt.
Method Overloading - Compile-time polymorfisme
- Meerdere methodes met dezelfde naam binnen dezelfde klasse, maar met verschillende parameters.
- Dit wordt bepaald tijdens compilatie.
Codevoorbeeld
class Rekenmachine
{
public int Optellen(int a, int b) => a + b;
public double Optellen(double a, double b) => a + b;
}
- Hier heeft
Optellen
verschillende parameterlijsten en wordt de juiste methode gekozen op basis van de gegeven argumenten.
Method Overriding - Runtime polymorfisme
- Een subklasse overschrijft een methode die al in een superklasse bestaat met
override
. - Dit werkt alleen als de methode in de superklasse als
virtual
ofabstract
is gedefinieerd. - Dit wordt bepaald tijdens uitvoering.
Codevoorbeeld
class Dier
{
public virtual void MaakGeluid() => Console.WriteLine("Dier maakt geluid");
}
class Hond : Dier
{
public override void MaakGeluid() => Console.WriteLine("Woef! Woef!");
}
Interface Implementation
- Een klasse implementeert een interface en definieert zijn eigen versie van de methode(s).
- Hierdoor kunnen verschillende klassen dezelfde interface delen, maar met hun eigen implementatie.
Codevoorbeeld
interface IDier
{
void MaakGeluid();
}
class Kat : IDier
{
public void MaakGeluid() => Console.WriteLine("Miauw! Miauw!");
}
Volgende stap: Oefeningen polymorfisme