Constructors (Yapıcı Metodlar)

Eyl 06, 2013

Yapılandırıcıların (constructor) görevi oluşturulan nesneyi ilk kullanıma hazırlamasıdır. C# da tüm sınıflar (class) tanımlansın ya da tanımlanmasın değer tiplerine sıfır, referans tiplerine "null" değerini atayan varsayılan bir yapılandırıcı vardır. Yapılandırıcısı tanımlandıktan sonra varsayılan yapılandırıcı bir daha kullanılmaz. Yapılandırıcıların bilinen temel özellikleri:

  • Kendi sınıfı ile aynı isme sahip olması,
  • Genellikle açık bir dönüş tipi olmaması,
  • Başka sınıflar tarafından kullanılabilmesi için erişimin public (aleni) olmasıdır.

C# dilinde bulunan ve nesne yönelimli programlama (object oriented programming) kavramı içinde yer alan en güzel özelliklerden biri de yapılandırıcıların aşırı yüklenmesidir. Bir nesne oluşturulurken birden farklı şekilde yaratılmak zorunda kalınabilir. Mesela bir programcı sınıfı var ve bu sınıftan oluşturulan her programcı nesnesinin tüm özellikleri oluşturulurken verilemeyebilir. Programcı nesneleri oluşturulurken bir kısım bilgiler sonradan elde edilmek durumunda kalınabilir; veya başka bir programda herhangi bir sınıfın bir örneği oluşturulurken bu nesneye ait olan n tane özelliğin bir kısmına ihtiyaç duymadan girilmeyen parametrelere varsayılan değerler atanarak işlemin halledilme şansı da olmaktadır. 

using System;

class OverLoadedFunctions
{
    static void Main(string[] args)
    {
        Programci a = new Programci();
        Programci b = new Programci(23, "Ziya");
        Programci c = new Programci(27, "Kamuran", "Kamiloğlu");
        Programci d = new Programci(30, "Hayrettin", "Kütükçü", "C#");
 

        a.showOzellikler();
        b.showOzellikler();
        c.showOzellikler();
        d.showOzellikler();

        Console.ReadLine();
    }
}

class Programci
{
    int yasi;
    string adi;
    string soyadi;
    string kullandigiDil;

    // Hic parametre almayan bir yapılandırıcı..
    public Programci()
    {
        this.adi = null;
        this.yasi = 0;
        this.soyadi = null;
        this.kullandigiDil = null;
    }

    // İsmini ve yasini alan bir yapılandırıcı..
    public Programci(int yasi, string adi)
    {
        this.adi = adi;
        this.yasi = yasi;

        this.soyadi = null;
        this.kullandigiDil = null;
    }
 

    // İsmini, soyismini ve yasini alan bir yapılandırıcı..
    public Programci(int yasi, string adi, string soyadi)
    {
        this.adi = adi;
        this.yasi = yasi;
        this.soyadi = soyadi; 
        this.kullandigiDil = null;
    }

    // İsmini, soyismini kullandığı dili ve yasini alan bir yapılandırıcı..
    public Programci(int yasi, string adi, string soyadi, string kullandigiDil)
    {
        this.adi = adi;
        this.yasi = yasi;
        this.soyadi = soyadi;
        this.kullandigiDil = kullandigiDil;
    }

    public void showOzellikler()
    {
        if (this.yasi != 0)
            Console.WriteLine("Yasi : " + this.yasi);
        else Console.WriteLine("Yasi bilgisi elimizde yok şu anda...");

        if (this.adi != null)
            Console.WriteLine("Adı : " + this.adi);
        else Console.WriteLine("Adi bilgisi elimizde yok şu anda...");

        if (this.soyadi != null)
            Console.WriteLine("Soyadı : " + this.soyadi);
        else Console.WriteLine("Soyadı bilgisi elimizde yok şu anda...");

        if (this.kullandigiDil != null)
            Console.WriteLine("Kullandığı Programlama dili : " + this.kullandigiDil);
        else Console.WriteLine("Hangi Dili kullanığını bilmiyoruz be... :-(\n");
    }

}

Yukarıdaki programda, Programci sınıfının yasi, adi, soyadi ve kullandigiDil olmak üzere 4 tane özelliği bulunmaktadır. Sınıfın 4 tane yapılandırıcısı var. Bunların isimleri aynı olmalıdır. (yapılandırıcının ismi sınıf ismi ile aynı olur). Farklı olan ise aldıkları parametre sayıları ve tipleri olabilir. Bu arada unutulmamalıdır ki yeni bir nesne oluşturulurken aşırı yüklenen yapılandırıcılar da yeni oluşturulan yapılandırıcılar gibi "new" ile çağrılır.

Sırasıyla, birinci yapılandırıcıya hiçbir değer atanmamıştır. İkinci yapılandırıcıya iki tane değişken atanmıştır. Bunlardan "yas" ve "adi" değerleridir. Üçüncüsüne ise yas, adi ve soyadi parametreleri atanarak nesne oluşturulmuştur. Son yapılandırıcı ise yas, adi, soyadi ve kullandigiDil değişkenlerinden oluşturulmuştur. İlk üç yapılandırıcı alınmayan yas değişkenine 0 diğerlerine null değerleri atanmıştır.

Sınıfın beşinci ve son metodunda (method) ise bu sınıftan üretilen bir nesnenin özellikleri ekrana yazdırılır. Eğer nesnenin bir özelliğinin değeri varsa o yoksa ekrana bu özellik hakkında bir bilgi yok şeklinde bir uyarı ekrana yazdırılır.

Programın Main() fonksiyonu içinde önce 4 tane (a, b, c, ve d) programcı nesnesi oluşturulur ve bunların her biri ayrı yapılandırıcılar ile oluşturulur. showOzellik() metodu ile bunların özellikleri ekrana yazdırılır.