C# Dersleri 74 - Kalıtım (Inheritance)


C# Kalıtım (Inheritance) Nedir?

Kalıtım (Inheritance), Nesne Yönelimli Programlama’nın (OOP) en önemli kavramlarından biridir. Kalıtım sayesinde bir sınıf, başka bir sınıfın özelliklerini ve metotlarını miras alarak kullanabilir. Bu, kod tekrarını azaltır ve daha düzenli bir yapı sağlar.

Kalıtımın Temel Özellikleri

  • Bir sınıf, başka bir sınıfın özelliklerini ve metotlarını devralabilir.
  • Alt sınıf (derived class) üst sınıfın (base class) tüm public ve protected üyelerine erişebilir.
  • Kalıtım sayesinde kod tekrarından kaçınılır ve kodun bakım maliyeti düşer.

Kalıtımın Söz Dizimi

class BaseClass
{
    // Üst sınıfın özellikleri ve metotları
}

class DerivedClass : BaseClass
{
    // Alt sınıf, BaseClass'ın özelliklerini ve metotlarını devralır.
}

Basit Bir Kalıtım Örneği

Aşağıda, Animal (Hayvan) adlı bir üst sınıftan türetilen Dog (Köpek) sınıfı bulunmaktadır:

using System;

class Animal
{
    public string Name;

    public void Eat()
    {
        Console.WriteLine($"{Name} yemek yiyor.");
    }
}

class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine($"{Name} havlıyor.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Dog myDog = new Dog();
        myDog.Name = "Karabaş";
        myDog.Eat(); // Üst sınıftan miras alınan metot
        myDog.Bark(); // Alt sınıfa özgü metot
    }
}

Programın Çıktısı

Karabaş yemek yiyor.
Karabaş havlıyor.

Kalıtım ile Constructor (Yapıcı Metot) Kullanımı

Alt sınıf, üst sınıfın yapıcı metodunu çağırabilir:

class Animal
{
    public string Name;

    public Animal(string name)
    {
        Name = name;
        Console.WriteLine("Animal constructor çalıştı.");
    }
}

class Dog : Animal
{
    public Dog(string name) : base(name) // Üst sınıfın constructor'ını çağırıyoruz
    {
        Console.WriteLine("Dog constructor çalıştı.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Dog myDog = new Dog("Karabaş");
    }
}

Programın Çıktısı

Animal constructor çalıştı.
Dog constructor çalıştı.

Metot Overriding (Ezme)

Üst sınıftaki bir metot, alt sınıfta tekrar tanımlanarak değiştirilebilir. Bu işleme method overriding denir.

class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Hayvan ses çıkarıyor.");
    }
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Köpek havlıyor.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Animal myAnimal = new Animal();
        myAnimal.MakeSound(); // Hayvan ses çıkarıyor.

        Dog myDog = new Dog();
        myDog.MakeSound(); // Köpek havlıyor.
    }
}

Programın Çıktısı

Hayvan ses çıkarıyor.
Köpek havlıyor.

Sealed (Kalıtımı Engelleme)

Eğer bir sınıfın başka bir sınıf tarafından miras alınmasını istemiyorsanız sealed anahtar kelimesini kullanabilirsiniz.

sealed class FinalClass
{
    public void Display()
    {
        Console.WriteLine("Bu sınıf devralınamaz.");
    }
}

// class Derived : FinalClass // HATA! Sealed sınıf devralınamaz.

Sonuç

Kalıtım, yazılımda kod tekrarını azaltarak, hiyerarşik ve modüler bir yapı sağlar. Üst sınıfın genel özellikleri tüm alt sınıflar tarafından kullanılabilir ve gerektiğinde metotlar ezilerek özelleştirilebilir.