Documente Academic
Documente Profesional
Documente Cultură
Boiciuc Roman
În programarea orientată pe obiecte, atunci când creați obiecte din anumite clase,
este uneori necesar să apelați câteva metode speciale ale acelor clase, cunoscute
sub numele de constructori.
Constructorul unei clase este o pseudo-metodă care nu returnează un tip, are același
nume cu cel al clasei și se apelează utilizând cuvântul cheie new. Sarcina
constructorului este aceea de a inițializa memoria alocată pentru obiect, unde vor fi
stocate câmpurile sale (cele care nu sunt statice – vom afla despre ceea ce înseamnă
static în viitor).
În lecția anterioară am aflat ce sunt câmpurile și proprietățile, și deja cunoaștem conceptul de metode. Deci, în codul de mai sus,
există o singură bucată rămasă neanalizată încă. Anume, aceasta:
Semi-metoda de mai sus se numește constructorul clasei noastre. De ce o numesc semi-metodă? Ei bine, puteți vedea în mod
clar că nu returnează un tip, ceea ce o exclude din categoria funcții, dar de asemenea nu folosește cuvântul cheie void, așa
cum orice metodă ar trebui.
Un alt lucru pe care l-ați observat este că identificatorul (numele) constructorului este identic cu identificatorul clasei. Să
vedem ce s-ar fi întâmplat dacă am fi numit constructorul în mod diferit:
Codul de mai sus ne va da o eroare: Metoda trebuie să returneze un
tip (Method must have a return type). Deci, compilatorul nu o mai recunoaște
ca fiind un constructor, ci mai degrabă încearcă să o trateze ca o funcție
obișnuită. Din acest lucru, rezultă următoarea concluzie: în C# este obligatoriu
ca numele fiecărui constructor să fie identic cu numele clasei în care este
declarat. De asemenea, nu este permisă declararea unei metode al cărei
nume este identic cu numele clasei (și implicit, numele constructorilor). Dacă
totuși, o metodă este declarată cu același nume cu al clasei, aceasta va cauza o
eroare de compilare ‘Cuptor’: numele de membri nu pot fi identice cu tipul ce
le înglobează (‘Cuptor’: member names cannot be the same as their
enclosing type).
Despre modificatori vom învăța în viitor, deși am întâlnit deja câțiva dintre ei
(private, public, static). În afară de aceasta, lista de parametri este similară cu
modul în care declarăm metodele cu parametri. În următoarea lecție, vom învăța
cum să creăm copii ale schiței obiectelor noastre. Dar, așa cum am învățat în
lecția Proprietăți, copiile noastre nu ne-ar fi de mare folos dacă nu le-am putea
individualiza:
Exemplul de mai sus funcționează perfect, dar are multe linii, mai ales dacă trebuie să specificăm o mulțime de proprietăți. În schimb, am putea
să facem acest lucru direct atunci când creăm copia obiectului, utilizând un constructor cu parametri. Să spunem că avem acest cod:
Un mod mult mai scurt și mai elegant de a defini o copie nouă! Un lucru de observat aici – am definit
variabilele parametrilor cu același nume cu al câmpurile noastre. Asta lucru este total acceptabil. De
asemenea, observați că domeniul de definiție al parametrilor constructorilor este identic cu domeniul
parametrilor metodelor obișnuite: este disponibil numai pentru corpul constructorului. Deși există o capcană
în privința acestui fapt. Am explicat anterior că folosirea cuvântului cheie this este opțională, și indică faptul
că ne referim la chestiuni legate de copia curentă a obiectului pe care îl manipulăm la momentul respectiv.
Deci, am fi putut scrie acest lucru: