Makale Özeti

Sınıfları oluştururken kullanılan constructorlar üzerine bir giriş yazısı

Makale

C#ta Constructors , Overwrite , Overloading

CONSTRUCTORS

using System;

class Yazgelistir
{
public int number=3;

public Yazgelistir() // Constructor Methodumuz
{
number = 5;
}
public void setNumber(int newNumber)
{
number = newNumber;
}
public int getNumber()
{
return number;
}
}

Konumuza direkt örnek bir kod yazarak başladım. İncelersek eğer şimdiye kadar ki makalelerimiz de
tanımladığımız methodlara hiçte benzemiyen bir method tanımlaması yaptığımızı görebilirsiniz. Yazgelistir()
isimli bu methodumuzun iki önemli özelliği var. İlki adının classımızın adı ile aynı olması.
Diğeri ise herhangi bir return değerinin olmayışı. Bildiğiniz gibi methodları tanımlarken return tiplerini de
belirtmek zorundaydık. Method eğer herhangi bir değer döndürmeyecekse return tipini void olarak
belirtiyorduk. Ancak burada sözü geçen methodumuz için bunların hiç birisi geçerli değil.

Class ile aynı adı taşıyan ve herhangi bir return değeri olmayan methodlara Constructor Methodlar diyoruz.

Herhangi bir classı çağırdığımızda ilk önce o classa ait constructor çalışır. Dolayısıyla, eğer her hangi bir
işlemin class ilk çağırıldığında yapılmasını istiyorsak bu işlemleri constructor içinde veya constructor tarafından
tetiklenen başka bir method içinde yapabiliriz.Bu yöntemini genelde classa ait bir takım değişkenlerin
değerlerini set etmek için kullanırız.

Şimdi yukarıda ki classımızı çağıracak olan methodumuzu yazalım.

public static void Main()
{
Yazgelistir test = new Yazgelistir();
Console.WriteLine(test.getNumber());
Console.ReadLine();
}

Burada methodun döndüreceği değer 5 olacak. Daha önce belirttiğim gibi her hangi bir classı çağırdığımızda
ilk önce o classın Constructor methodu çalıştırılır. Örneğimizde ki constructor da number değişkenini set ederek
değerini beşe eşitliyor.
Yukarıda, herhangi bir classı çağırdığımızda ilk önce constructorın çalışmaya başladığını belirttik.
Peki eğer çağırılan classın herhangi bir constructorı yoksa ne olucak,örneğin daha önce hazırladığım makalelerde ki
örneklerin hiç birinde constructor methodunu yazmamıştım.
Aslına bakarsanız her classın default bir constructor methodu vardır ve boştur. Yani demin ki örneği baz alırsak;

public Yazgelistir() // Default Constructor Methodu
{
}

   Constructorımıza dışarıdan değer de gönderebiliriz. Şöyle ki;


using System;

class Yazgelistir
{
public int number;

public Yazgelistir(int newNumber) // Dışarıdan değer alan Constructor Methodumuz
{
number = newNumber;
}
public int getNumber()
{
return number;
}
}

Dışarıdan değer alan Constructorı ise şu şekil de çağırabiliriz.


public static void Main()
{
Yazgelistir test = new Yazgelistir(12);
Console.WriteLine(test.getNumber());
Console.ReadLine();
}

Dilersek aynı class için de birden fazla constructor tanımlıyabiliriz. Yukarıda ki örneklerde de gördüğünüz gibi
constructor lar her hangi bir isim ile tanımlanmadıklarından derleyici hangi constructorın çağırıldığını methodun
dışarıdan aldığı parametrelere göre ayırır. Aynı işlem method ve fonksiyonlar için de geçerlidir.
Buna Overloading denir. Şimdi bu kavramı inceliyelim.

OVERLOAD KAVRAMI

İsimleri aynı ancak dışarıdan aldığı parametrelerin pirimitiv tipleri farklı olan iki ayrı method yada
fonksiyon tanımlama işlemine Overloading denir. Bir örnek vericek olursak.

using System;

class Yazgelistir
{
public static void Main()
{
Yazgelistir test = new Yazgelistir();
Console.WriteLine(test.TestMethod("İlk Methodu Çağırıyorum"));
Console.WriteLine(test.TestMethod(6));
Console.ReadLine();
}
public String TestMethod(String newMesaj)
{
String mesaj = "String deger alan Methodhodu çağırdınız =" + newMesaj;
return mesaj;
}
public String TestMethod(int sayi)
{
String mesaj = "Integer deger alan Methodhodu çağırdınız =" + sayi;
return mesaj;
}
}

Görüldüğü gibi iki methodun da isimleri ve return tipleri aynı olmasına rağmen dışarıdan aldığı parametre tipleri
farklı olduğu için istediğimiz methodu yada fonksiyonu çağırabildik. Aynı işlemi yukarıda anlattığım
constructorlar için de gerçekleştirebiliriz.

OVERWRITE KAVRAMI

Bazen daha önce programın herhangi bir yerinde tanımlamış olduğumuz bir method yada değişkeni ezmek isteriz.
Yani aynı tipte ve özelliklerde bir method yada değişken daha yaratarak ilk önce yaratılanın etkisiz kalmasını
sağlıyabiliriz. Tabi bu bilerek yapılabileceği gibi dikatsizlik sonucu istenmeden de gerçekleşebilecek bir olay.
Bu makalemizde şimdilik sadece değişkenleri overwrite etme üzerin de duracağız.

using System;

class Yazgelistir
{
public int deger = 7;

public int testMethod()
{
int deger = 3;
return deger;
}
public static void Main()
{
int deger = 5;
Yazgelistir test = new Yazgelistir();
Console.WriteLine("Değişkenin testMethod Değeri ="+test.testMethod());
Console.WriteLine("Değişkenin Main Fonksiyonuna Ait Değeri ="+deger);
Console.WriteLine("Değişkenin Class Değeri ="+test.deger);
Console.ReadLine();
}
}

     Yukarıda ki örnekte görüldüğü gibi integer tipteki "deger" değişkeni aynı uygulama içinde farklı bloklarda
üç kere tanımlanmasına rağmen hata vermedi. Bir değişkenin değerini ekrana basmaya kaltığımız zaman,
değer ilk önce bulunulan blok içinde aranır. O blok içinde eğer tanımlı böyle bir değişken varsa değeri
ekrana basılır. Aksi taktirde Class seviyesine çıkılarak istenen değişkene bakılır. Yoksa uygulama zaten
böyle bir değişken tanımlı değil diye hata vericektir.


Şimdilik bu kadar. Bir sonraki yazımda tekrar görüşmek üzere.

Güven Kebeci
gkebeci@yahoo.com