Bir sınıftan nesne oluşturulduğu an arkaplanda otomatik olarak çalıştırılan metotlara yapıcı metotlar denilmektedir. Bu yüzden nesne oluşturulduğunda otomatik olarak yapılmasını istediğimiz işlemleri yapıcı metotların içerisine yazarız.
Yapıcı Metotlar Nasıl Tanımlanır ?
- Yapıcı metotların isimleri sınıf isimleri ile aynı olmak zorundadır.
- Public olarak bildirilmeleri gerekir.
- Geri dönüş değerleri yoktur.
class Matematik { private double PiSayisi; private double EulerSayisi; public Matematik() { PiSayisi = 3.1415; EulerSayisi = 2.7182; } }
“new Matematik()” ifadesi ile Matematik sınıfından bir nesne oluşturulduğu an yapıcı metot otomatik olarak çalışacak ve PiSayisi özelliğine 3.1415 değerini, EulerSayisi özelliğine 2.7182 değerini atayacaktır.
Sıradan metotlar gibi yapıcı metotlarda parametre alabilmektedir. Ancak yapıcı metotlar nesne oluşturulduğu an çalıştığı için parametreler nesne oluşturulurken girilmelidir.
class Ogrenci { // Özelliklere diğer sınıflardan erişilemez. (Private) private string AdSoyad; private int Numara; private int Sinif; // Nesne oluşturulurken girilen parametreler ilgili özelliklere atanacaktır. public Ogrenci(string ogrAdi,int ogrNo,int ogrSinif) { AdSoyad = ogrAdi; Numara = ogrNo; Sinif = ogrSinif; } // Öğrenciye ait bilgiler ekrana yazdırılacaktır. public void Bilgi() { Console.WriteLine("Öğrencinin Adı:{0}", AdSoyad); Console.WriteLine("Öğrencinin Numarası:{0}", Numara); Console.WriteLine("Öğrencinin Sınıfı:{0}", Sinif); } } class Program { static void Main(string[] args) { // Yapıcı metoda parametreler nesne oluşturulurken gönderildi. Ogrenci ogr1 = new Ogrenci("Serdar Yılmaz", 134, 4); Ogrenci ogr2 = new Ogrenci("Ümit Özkan", 118, 3); // Öğrencilere ait bilgiler ekrana yazdırıldı. ogr1.Bilgi(); ogr2.Bilgi(); } }
Bir önceki yazımızda Sınıfları anlatırken yukarıdaki programı yapıcı metot kullanmadan hazırlamıştık (Bkz:C# – Sınıflar). Her iki kaynak kodu karşılaştırıldığında, yapıcı metodun Main()‘de ki kod kalabalığını azalttığı ve özelliklere olan erişimi daha kontrollü bir şekilde sağladığı görülecektir.
Yapıcı Metotların Aşırı Yüklenmesi
Tıpkı sıradan metotlar gibi yapıcı metotlarda aşırı yüklenebilir. Metotları anlatırken imza kavramına ve metotların aşırı yüklenmesine değinmiştik (Bkz: C# – Metotların Aşırı Yüklenmesi). Yinede kısaca bahsetmek gerekirse; parametre sayısı ve parametrelerin tipinden en az birisinin farklı olması şartıyla birden fazla yapıcı metot tanımlanabilir.
class Silindir { private double r; private double h; private double PI = 3.1415; // Nesne oluşturulurken double tipinde 2 parametre girildiğinde çalışacak olan yapıcı metot. public Silindir(double yaricap, double yukseklik) { r = yaricap; h = yukseklik; } // Nesne oluşturulurken double tipinde 3 parametre girildiğinde çalışacak olan yapıcı metot. public Silindir(double yaricap, double yukseklik, double piSayisi) { r = yaricap; h = yukseklik; PI = piSayisi; } public double Hacim() { return (PI * r * r * h); } public double YuzeyAlani() { return (2 * PI * r * h); } } class Program { static void Main(string[] args) { // 3.Parametre girilmediği için PI başlangıç değerini(3.1415) alacaktır. Silindir s1 = new Silindir(4, 6); Console.WriteLine("Silindirin Hacmi:{0} - Silindirin Yüzey Alanı:{1}", s1.Hacim(), s1.YuzeyAlani()); // 3.Parametreye girilen değer PI'ye atanacaktır. Silindir s2 = new Silindir(4, 6, 3); Console.WriteLine("Silindirin Hacmi:{0} - Silindirin Yüzey Alanı:{1}", s2.Hacim(), s2.YuzeyAlani()); } }
Varsayılan Yapıcı Metot
Her sınıfın biz tanımlasak da tanımlamasak da bir yapıcı metodu vardır. Bu yapıcı metoda varsayılan yapıcı metot denilmektedir. Default olarak sınıf içerisinde yer alan bu yapıcı metodun görevi; sınıf içerisindeki özelliklere(değişkenlere) herhangi bir ilk değer vermediğimizde, bu özelliklerden numerik olanlara “0”, bool tipinde olanlara “false ” ve string gibi referans tipli olanlara da “null” değerini atamaktadır.
Serdar YILMAZ
teşekkürler
Başarılı.
Hocam kalemine sağlık vallahi, koca koca derslerden sonra hap gibi, açıklayıcı, çok güzel oldu bu bilgiler.
Verdiğiniz bilgiler için gerçekten çok teşekkürler .Anladığımı sandığım şeyleri de meğerse bilmiyormuşum bunu farketmiş oldum.
Serdar bey kısa ve öz anlatımınız için teşekkür ederiz
Sayfanızın çok yardımı dokundu. Çalışmalarınızın devamını dilerim.
Mukemmel, kafa karistirmadan cok temiz anlatim. Buda bir yetenek olsa gerek. Muhtesem bir ornek.
Değerli yorumunuz için teşekkür ederim.