C# kalıtım (inheritance), nesne yönelimli programlamanın (OOP) temel özelliklerinden biridir ve bir sınıfın başka bir sınıfın özelliklerini ve davranışlarını miras almasına olanak tanır. Kalıtım sayesinde kod tekrarını azaltabilir ve daha esnek bir yapı oluşturabilirsiniz.
1. Kalıtımın Temel Amacı
- Kodun Yeniden Kullanımı: Mevcut sınıfların özelliklerini ve metotlarını başka bir sınıfta kullanabilirsiniz.
- Hiyerarşik Yapı: Daha organize ve kolay yönetilebilir bir sınıf hiyerarşisi oluşturabilirsiniz.
- Genişletilebilirlik: Yeni sınıflar oluştururken mevcut sınıfların üzerine ekleme yapabilirsiniz.
2. Kalıtımın Söz Dizimi
Kalıtım yapmak için bir sınıfın adından sonra :
operatörü ve ardından üst sınıfın adı yazılır.
class UstSinif
{
public void MesajGoster()
{
Console.WriteLine("Bu üst sınıftan bir mesajdır.");
}
}
class AltSinif : UstSinif
{
public void AltMesaj()
{
Console.WriteLine("Bu alt sınıftan bir mesajdır.");
}
}
Kullanım:
AltSinif alt = new AltSinif();
alt.MesajGoster(); // Üst sınıf metodu
alt.AltMesaj(); // Alt sınıf metodu
3. Kalıtım Türleri
a. Tekli Kalıtım (Single Inheritance)
Bir alt sınıf yalnızca bir üst sınıftan türeyebilir.
class Hayvan
{
public void SesCikar()
{
Console.WriteLine("Hayvan sesi çıkardı.");
}
}
class Kopek : Hayvan
{
public void Havla()
{
Console.WriteLine("Köpek havladı.");
}
}
b. Çok Katmanlı Kalıtım (Multilevel Inheritance)
Bir sınıf başka bir sınıftan türediğinde ve bu sınıf da başka bir sınıftan türediğinde oluşur.
class Canli
{
public void YasamBelirtisi()
{
Console.WriteLine("Canlıdır.");
}
}
class Hayvan : Canli
{
public void YemekYe()
{
Console.WriteLine("Hayvan yemek yedi.");
}
}
class Kopek : Hayvan
{
public void Havla()
{
Console.WriteLine("Köpek havladı.");
}
}
Kullanım:
Kopek kopek = new Kopek();
kopek.YasamBelirtisi();
kopek.YemekYe();
kopek.Havla();
4. Kalıtımda Erişim Belirleyiciler
Kalıtımda, alt sınıfın hangi üyeleri miras alacağını belirlemek için erişim belirleyiciler kullanılır.
a. public
:
Üyeler alt sınıfta tamamen erişilebilirdir.
b. protected
:
Üyeler alt sınıfta erişilebilir, ancak sınıf dışından erişilemez.
c. private
:
Üyeler yalnızca tanımlandığı sınıfta kullanılabilir. Kalıtımda miras alınmaz.
Örnek:
class UstSinif
{
public int PublicDegisken = 10;
protected int ProtectedDegisken = 20;
private int PrivateDegisken = 30;
}
class AltSinif : UstSinif
{
public void DegerleriYazdir()
{
Console.WriteLine($"Public: {PublicDegisken}");
Console.WriteLine($"Protected: {ProtectedDegisken}");
// Console.WriteLine($"Private: {PrivateDegisken}"); // Hata: Private miras alınmaz.
}
}
5. base
Anahtar Kelimesi
base
anahtar kelimesi, alt sınıfın üst sınıfa ait üyelere erişmesini sağlar.
- Üst sınıfın yapıcı metotlarını çağırmak için kullanılır.
- Üst sınıfın metotlarını ve özelliklerini alt sınıf içinde genişletmek için kullanılır.
class UstSinif
{
public UstSinif()
{
Console.WriteLine("Üst sınıf yapıcısı çalıştı.");
}
public void MesajGoster()
{
Console.WriteLine("Üst sınıf mesajı.");
}
}
class AltSinif : UstSinif
{
public AltSinif() : base()
{
Console.WriteLine("Alt sınıf yapıcısı çalıştı.");
}
public void YeniMesajGoster()
{
base.MesajGoster();
Console.WriteLine("Alt sınıf mesajı.");
}
}
6. Sanal ve Geçersiz Kılma (Virtual ve Override)
Alt sınıflarda üst sınıfın metotlarının davranışlarını değiştirmek için virtual
ve override
anahtar kelimeleri kullanılır.
Örnek: Virtual ve Override Kullanımı
class UstSinif
{
public virtual void MesajGoster()
{
Console.WriteLine("Üst sınıf mesajı.");
}
}
class AltSinif : UstSinif
{
public override void MesajGoster()
{
Console.WriteLine("Alt sınıf mesajı.");
}
}
Kullanım:
UstSinif ust = new UstSinif();
ust.MesajGoster(); // Çıktı: Üst sınıf mesajı.
AltSinif alt = new AltSinif();
alt.MesajGoster(); // Çıktı: Alt sınıf mesajı.
7. Abstract (Soyut) Sınıflar
Soyut sınıflar, yalnızca türetilmek için kullanılır. Kendileri örneklenemez ve soyut metotlar içerir.
abstract class Sekil
{
public abstract void Ciz();
}
class Daire : Sekil
{
public override void Ciz()
{
Console.WriteLine("Daire çizildi.");
}
}