Avatar billede tj_cuper Nybegynder
14. marts 2008 - 12:09 Der er 12 kommentarer og
1 løsning

Hjælp til forklaring af class constructors

Hej,
jeg vil høre om nogen, af jer kunne forklare mig, hvad class constructors helt går ud på.

Jeg har siddet og læst, men synes ikke rigtig jeg kan forstå det.
Hvis en af jer kunne forklare det, vil det være super nice :)

På forhånd tak.
Avatar billede nielle Nybegynder
14. marts 2008 - 13:09 #1
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.
Avatar billede pidgeot Nybegynder
14. marts 2008 - 13:18 #2
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.
Avatar billede tj_cuper Nybegynder
14. marts 2008 - 13:36 #3
Så man behøver ikke selv, at oprettet en constructor, for det compileren selv klare?
Avatar billede arne_v Ekspert
14. marts 2008 - 14:06 #4
Hvis du ikke selv opretter en constructor saa oprettes der en for dig uden argumenter.
Avatar billede tj_cuper Nybegynder
14. marts 2008 - 14:44 #5
Okay hvad er grunden så til, at man kan lave sine egne?
Avatar billede arne_v Ekspert
14. marts 2008 - 14:48 #6
Hvis du vil have nogle argumenter med over til constructor.

Eller hvis constructor uden argumenter faktisk skal goere noget.
Avatar billede tj_cuper Nybegynder
14. marts 2008 - 14:53 #7
I hvilket tilfælde, vil det så være optimalt, at lave sin egen constructor.

Har du et lille eksempel?
Avatar billede nielle Nybegynder
14. marts 2008 - 16:11 #8
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.
Avatar billede tj_cuper Nybegynder
14. marts 2008 - 16:20 #9
Ja okay, så man kan faktisk sige, det er en default value.
Avatar billede nielle Nybegynder
14. marts 2008 - 20:51 #10
Ikke kun "en" - constructoren kan sagtens initialisere flere forskellige indre variable.
Avatar billede tj_cuper Nybegynder
14. marts 2008 - 23:51 #11
Okay tak, tror jeg har fattet lidt af det nu :)

Smid et svar.
Avatar billede nielle Nybegynder
15. marts 2008 - 08:28 #12
Svar :^)
Avatar billede tj_cuper Nybegynder
15. marts 2008 - 17:33 #13
Tak for hjælpen alle sammen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester