Constructor chaining is een techniek waarbij de ene constructor een andere constructor binnen dezelfde klasse aanroept. Dit voorkomt codeherhaling en maakt het mogelijk om objecten op een efficiënte manier te initialiseren. constructor chaining wordt bereikt door gebruik te maken van het : this(...) keyword.
Casus
Stel je bouwt een auto in een programma en wilt verschillende manieren bieden om een auto-object te initialiseren. Met constructor chaining kun je een basisconstructor definiëren en extra constructors maken die deze basisconstructor aanroepen.
Hoe zit constructor chaining in elkaar?
Een constructor kan een andere constructor binnen dezelfde klasse aanroepen door gebruik te maken van this(...). Dit zorgt ervoor dat gedeelde initialisatielogica niet wordt gedupliceerd. Constructor overloading maakt dit mogelijk door meerdere constructors te definiëren met verschillende parameterlijsten.
Deze code laat zien hoe een klasse Auto meerdere constructors kan hebben die elkaar aanroepen via constructor overloading (meerdere constructors) en constructor chaining (de ene constructors roept de andere aan):
Codevoorbeeld
public class Auto{ public string Merk { get; set; } public string Model { get; set; } public int Bouwjaar { get; set; } // Hoofdconstructor public Auto(string merk, string model, int bouwjaar) { Merk = merk; Model = model; Bouwjaar = bouwjaar; } // Constructor die een standaard bouwjaar instelt public Auto(string merk, string model) : this(merk, model, 2023) { } // Constructor zonder parameters, met standaardwaarden public Auto() : this("Onbekend", "Onbekend", 2000) { }}
Hoe gebruik je constructor chaining?
Constructor chaining wordt gebruikt om meerdere manieren te bieden om een object te -=INITIALISEREN=- zonder duplicatie van code. Dit maakt de code efficiënter en onderhoudsvriendelijker. Met constructor chaining kun je standaardwaarden instellen of extra opties bieden zonder alle constructors afzonderlijk te definiëren.
Casus
Stel je maakt een applicatie waarin je verschillende soorten meubels wilt beheren. Sommige meubels hebben een standaardprijs of standaardmateriaal, maar je wilt ook flexibiliteit bij de initialisatie. Met constructor chaining en constructor overloading kun je dit eenvoudig implementeren.
Mogelijke uitwerking van de casus
public class Meubel{ public string Naam { get; set; } public string Materiaal { get; set; } public decimal Prijs { get; set; } // Hoofdconstructor public Meubel(string naam, string materiaal, decimal prijs) { Naam = naam; Materiaal = materiaal; Prijs = prijs; } // Constructor met een standaardprijs public Meubel(string naam, string materiaal) : this(naam, materiaal, 99.99m) { } // Constructor met standaardwaarden public Meubel() : this("Onbekend", "Hout", 49.99m) { }}// GebruikMeubel stoel = new Meubel("Stoel", "Hout");Meubel tafel = new Meubel("Tafel", "Metaal", 129.99m);Meubel onbekend = new Meubel();