20
Şub'14

OOP 8: Base Ctor Çağırımları, Base Ctor’a Parametre Geçirme, Base, Override, New Anahtar Kelimeleri (C# ile OOP)

Bu yazımda kalıtıma kısa bir giriş yaparak, kalıtım uygulanmış bir yapıda ctor çağırımlarının hangi sırada gerçekleştiğini, base ctor’a nasıl parametre gönderildiğini, bazı anahtar kelimelerin(base, override, new) ne işe yaradıklarını ve kullanımlarını açıklamaya çalışacağım.

 

Kalıtım hakkında bilgi sahibi olmak için bir önceki yazım olan OOP 7‘yi okuyabilirsiniz. Eğer hazırsak kalıtıma kısa bir giriş ile başlayalım.

 

Girişte bahsettiğim konulara açıklık getirebilmek için elbette kalıtım uygulanmış bir yapıya ihtiyacım var. Eşya sınıfından türetilmiş elektronik eşya sınfı ve elektronik eşya sınıfından türetilen iki adet sınıfımız(telefon, bilgisayar) olsun.

Class View

Kalıtım Uygulanmış Sınıflarda Ctor Çağrım Sırası

Bu sınıfların her biri içerisine bir ctor kodlayalım ve her ctor, çağırıldığında kim olduğunu bize söylüyor olsun. Son durumda kodladığımız sınıfların içerisi şu şekildedir:

class Esya
{
    public Esya()
    {
        Console.WriteLine("Eşya sınıfının yapıcı fonksiyonu çağırıldı.");
    }
}

class ElektronikEsya : Esya
{
    public ElektronikEsya()
    {
        Console.WriteLine("ElektronikEsya sınıfının yapıcı fonksiyonu çağırıldı.");
    }
}

class Telefon : ElektronikEsya
{
    public Telefon()
    {
        Console.WriteLine("Telefon sınıfının yapıcı fonksiyonu çağırıldı.");
    }   
}

class Bilgisayar : ElektronikEsya
{
    public Bilgisayar()
    {
        Console.WriteLine("Bilgisayar sınıfının yapıcı fonksiyonu çağırıldı.");
    }
}

Main class içerisinde de Telefon sınıfından bir nesne yaratarak ctor çağırımlarının sırasını inceleyelim.

static void Main(string[] args)
{
    Telefon telefon = new Telefon();
}

Program çalıştırıldığında aşağıdaki çıktı alınır.

CtorCagirimiSirasi

Gördüğünüz gibi ilk önce kalıtım ağacının en tepesindeki sınıfın yapıcı fonksiyonu çağrıldı. Ardından sırayla child class’lara doğru inilerek base class yapıcı fonksiyonları sıra ile çağrıldı.

Base Ctor’a Parametre Gönderilmesi

Base ctor’a parametre göndermek için base anahtar kelimesi kullanılır. Bu anahtar kelimeyi sınıfımızın ctor tanımının yanına “:” koyarak yazarız ve parantezler arasına base sınıfa göndereceğimiz parametleri belirtiriz.

class BaseClassName
{
    public BaseClassName(int parametre1)
    {

    }
}

// Base class ctor'u integer bir parametre alıyor.
class ChildClassName : BaseClassName
{
    public ChildClassName (int parametre1, string parametre2)
        : base(parametre1) // parametre1 base ctor'a gönderildi.
    {

    }
}

Bu konuya açıklık getirebilmek için ilk örnek üzerinden sınıfların ctor yönlendirmelerini yaparak devam edelim.

class Esya
{
    public Esya(string esyaAdi)
    {
        Console.WriteLine(esyaAdi);
    }
}

class ElektronikEsya : Esya
{
    public ElektronikEsya(int voltaj, string esyaAdi)
        :base(esyaAdi)
    {
        Console.WriteLine(voltaj);
    }
}

class Bilgisayar : ElektronikEsya
{
    public Bilgisayar(string ekranKartiMarkasi, int voltaj, string esyaAdi)
        :base(voltaj,esyaAdi)
    {
        Console.WriteLine(ekranKartiMarkasi);
    }
}

Bir bilgisayar nesnesi yaratarak ctor yönlendirmelerinin doğru şekilde çalışıp çalışmadığına bakalım.

static void Main(string[] args)
{
    Bilgisayar bilgisayar = new Bilgisayar("NVIDIA", 18, "Bilgisyar");
}

Ekran görüntüsü aşağıdaki gibidir:

CtorYonlendirmeleriSonuc

Kısa bir özet:

– Kalıtım yapıldığında ctor çağırımlarının hangi sırada olduğunu ve base ctor’a nasıl parametre geçirildiğini yani ctor yönlendirmelerini inceledir.

Yeni makaleleri E-Mail ile takip edin!