Konstruktori
1. način (jednostavniji) na koji se mogu objasniti konstruktori:
Constructor - konstruktor je najjednostavnije rečeno prva metoda koja se izvršava kad se poziva vaša klasa, stručnije rečeno kad se stvara primerak tipa. Svaka klasa ima konstruktor čak iako ga vi ne napišete i svaki konstruktor se u C# programskom jeziku zove isto kao i klasa. Znači konstruktor je specijalna metoda. Konstruktori jesu specijalna metoda, više metoda koja ne vraća vrednost ali bez ključne reči void jer konstruktori nikada ne mogu da vraćaju vrednosti. Konstruktori služe da vi inicijalizujete podatke klase ili strukture pre upotrebe.
Svaka klasa ili struktura može imati jedan konstruktor, čak iako ga ne napišete ili možete imati više konstruktora, ali svi se oni zovu isto kao i klasa. Međutim, da bi se konstruktori razlikovali jedan od drugog oni moraju da imaju različite atribute. Sintaksa za konstruktor je sledeća:
public class ime_klase
{
public bool ime_promenljive;
public ime_klase( bool ime_atributa )
{
ime_promenjive = ime_atributa;
}
}
Možete pomisliti da u navedenoj sintaksi postoji greška, da je trebalo
napisati ime konstruktora, ali jednostavno ime konstruktora nije opcija,
već kao što je rečeno ime konstruktora mora biti isto kao i ime klase!
(izvor, www.manuelradovanovic.com )
2. Način, sa sve primerima koje radimo na času:
Šta su konstruktori? Konstruktori su specijalne metode koje služe za inicijalizaciju objekata nakon njihovog kreiranja. Oni obezbeđuju da objekat ima dobro definisano početno stanje pre nego što se upotebi. Ako ne uspe inicijalizacija neće postojati objekat.
Za imenovanje konstruktora koristi se ime klase (metoda ima isto ime kao i klasa) iza koga slede zagrade.
Konstruktori nemaju povratnu vrednost, pa čak ni tipa void.
Postoje dve vrste konstruktora i to:
- konstruktori instance (vrše inicijalizaciju objekata)
- statički konstruktori (vrše inicijalizaciju klasa)
Kada se kreira objekat .NET kompajler, ukoliko nije
eksplicitno naveden konstruktor, automatski generiše podrazumevani
konstruktor
Primer, kroz koji možemo da vidimo navedene činjenice je sledeći:
class Datum
{
private int godina;
private int mesec;
private int dan;
/* public Datum () { ... } default konstruktor koji se automatski generiše pošto nije naveden konstruktor */
}
class Test
{
static void Main()
{
Datum danas = new Datum(); /* kreira se objekat i poziva konstruktor */
...
}
}
Vrlo je bitno da zapamtite osobine podrazumevanih konstruktora zbog njegove dalje upotrebe u raznim Vašim programima (koristićete ih u svakoj klasi koju napravite).
Osobine podrazumevanog konstruktora su:
- Podrazumevani konstruktor ne prima parametre.
- Podrazumevani konstruktor implicitno inicijalizuje sva nestatička polja na njihove podrazumevane vrednosti i to:
- numerička polja (int, double,decimal) na nulu
- logička polja na false
- polja referentnog tipa na null
- polja tipa zapis tako da su svi elementi zapisa inicijlizovani na njihove podrazumevane vrednosti.
Modifikator pristupa je public.
Konstruktor može primiti jedan ili više parametara koji se koriste za inicijalizaciju polja.
Ako se u klasi deklariše bar jedan konstruktor, kompajler neće generisati podrazumevani konstruktor.
public class Datum
{
public int godina, mesec, dan;
public Datum(int g, int m, int d)
{
godina = g;
mesec = m;
dan = d;
}
}
class Test
{
static void Main()
{
Datum danas = new Datum(2011,09,21);
}
}
Sva polja koja nisu inicijalizovana u korisnički definisanom konstruktoru zadržavaju svoju podrazumevanu inicijalizaciju.
public class Datum
{
public int godina, mesec, dan;
public Datum(int g, int m, int d)
{
godina = g;
mesec = m;
dan = d;
}
}
public class Primer
{
static void Main()
{
Datum danas = new Datum(2011, 09, 21);
Console.WriteLine(danas.godina); // ispisuje 2010
Console.WriteLine(danas.mesec); //ispisuje 9
Console.WriteLine(danas.dan); // ispisuje 21
}
}
Za jednu klasu može se definisati više konstruktora.
NAPOMENA:
lista parametara svakog od njih mora biti jedinstvena, ili po broju ili
po tipu parametara (odnosno moraju imati različite potpise)