Basalt set er en constructor blot en metode som har til ansvar at initialisere instanser (objekter) af klassen - altså at sætte diverse startværdier.
Man kunne i princippet godt selv have lavet en sådan funktion og så have kaldt den for f.eks. init().
Der er altså intet som helst mystisk ved det den gør. Når den alligevel har en special status i forhold til andre metoder så skyldes de forskellige forhold:
1) Hnhver metode skal have en eller flere constructore; En klasse skal jo altid initialiseres ellers ville dens variable være totalt udefinered med alle mulige eksotiske fejl til følge. 2) Hvis man derfor ikke selv skriver en cubstructor, så må compileren derfor selv supplere en cosntructor – default sconstructoren. 3) Constructoren kaldes på en speciel måde, ide at den gemmer sig under ”aliaset” new. Man han nu hellerer ikke kalde constructoren efter at objektet er oprettet. 4) En constructor har i øvrigt en tvilling – kaldet en destructor. Denne er ikke nær så synlig i C# som i visse andre OOP sprog. Den komme ind i billedet hvis man af en eller anden grund har behov for at definere sin klasse som IDisposable.
Men altså: En constructor er egentligt bare en almindelig metode som har til ansvar at initialisere en klasse.
Endeligt er der da lidt tekniske finesser ved constructore i forhold til virtuelle funktioner og polymorfi generelt. Dette er dog ikke noget man bør bekymre sig om som nybegynder udi OOP.
Jeg tror nu det der spørgeren har i tankerne er det der eksplicit kaldes class constructor, og ikke bare en constructor. Forskellen mellem de to er i al sin enkelhed at class constructoren køres når klassen oprettes (på run-time, naturligvis), mens den normale constructor bruges når klassen instantieres. Man kan af den grund heller ikke definerer parametre på en class constructor.
For at erklære en class constructor, laver man en normal constructor og erklærer den static.
Antag at du har en klasse som hedder Person - den har et int-felt som angiver alderen på personen.
Hvis du bare opretter et objekt af denne type vil alderen automatisk være 0 - fordi at dette er defaultværdien for en int.
Du har nu 2 muligheder:
1) Du kan ændre alderen bagefter. Dette har den ulempe at du faktisk har mulighed for at lade være med at angive en alder.
2) Du kan lave din egen constructor sådan at du faktisk kan angive hvad alderen er *samtidig* med at du opretter personen.
Dette var bare et eksempel. Lige i dette tilfælde kan man godt forsvare at det skal være muligt at vælge en person uden eksplicit at angive alderen med det samme. Men i andre sammenhænge, for ander typer af klasser, giver det absolut ingen mening at man kan få lov til at oprette objekter af en given klasse ... ude at man samtidigt eksplicit angiver startværdier for de variable der er i klassen. Ved at skrive en constructor for klassen kan du gennemtvinge at klassens værdier bliver sat til noget fornuftigt.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.