crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
C# Kalıtım (Inheritance) Rehberi: Base Class, virtual ve override Kavramları
Gerçek hayatta nasıl ki bir çocuk ebeveynlerinden belirli özellikleri (göz rengi, boy vb.) miras alıyorsa, C#'ta da sınıflar birbirlerinden özellik alabilirler. Bu, kod tekrarını önler ve projelerimizin hiyerarşik bir düzende büyümesini sağlar.
1. Base Class (Temel Sınıf) ve Derived Class (Türetilmiş Sınıf)
Kalıtımda iki ana aktör vardır:
[]Base Class (Parent): Özelliklerini devreden üst sınıf.
[]Derived Class (Child): Üst sınıftan özellikleri alan alt sınıf.
C#'ta kalıtım : operatörü ile sağlanır.
C#:
// Base Class (Temel Sınıf)
public class Memeli
{
public string Ad { get; set; }
public void Beslen() => Console.WriteLine($"{Ad} besleniyor...");
}
// Derived Class (Türetilmiş Sınıf)
public class Kedi : Memeli
{
public void Miyavla() => Console.WriteLine("Miyav!");
}
Yukarıdaki örnekte Kedi sınıfı, Memeli sınıfından Ad özelliğini ve Beslen() metodunu otomatik olarak devralır.
2. Metot Ezme (Method Overriding): virtual ve override
Bazen temel sınıftan gelen bir metodun, alt sınıfta farklı şekilde çalışmasını isteyebiliriz. Örneğin, her hayvan ses çıkarır ama her birinin sesi farklıdır.
virtual Anahtar Kelimesi
Eğer temel sınıftaki bir metodun alt sınıflar tarafından değiştirilmesine (ezilmesine) izin vermek istiyorsanız, o metodu virtual olarak tanımlamalısınız.override Anahtar Kelimesi
Alt sınıfta, temel sınıftan gelen virtual bir metodu yeniden yazmak istediğinizde override kelimesini kullanırsınız.
C#:
public class Hayvan
{
public virtual void SesCikar()
{
Console.WriteLine("Hayvan bilinmeyen bir ses çıkardı.");
}
}
public class Kopek : Hayvan
{
public override void SesCikar()
{
Console.WriteLine("Hav hav!");
}
}
3. base Anahtar Kelimesi
Alt sınıftayken, temel sınıftaki bir metoda veya yapıcı metoda (constructor) erişmek isterseniz base anahtar kelimesini kullanırsınız.
C#:
public class Personel
{
public Personel(string isim) => Console.WriteLine($"Personel: {isim}");
}
public class Mudur : Personel
{
public Mudur(string isim) : base(isim) // Üst sınıfın constructor'ını çağırır
{
Console.WriteLine("Müdür nesnesi oluşturuldu.");
}
}
4. Sealed Sınıflar: Kalıtımı Durdurmak
Eğer bir sınıfın asla miras bırakmamasını (yani başka bir sınıfın ondan türememesini) istiyorsanız, o sınıfı sealed olarak tanımlarsınız. Bu, güvenlik ve tasarım bütünlüğü için önemlidir.
C#:
public sealed class GuvenlikSistemi
{
// Bu sınıftan kimse miras alamaz!
}
Özet: Kalıtımın Avantajları
| Avantaj | Açıklama |
|---|---|
| Kod Tekrarı | Ortak kodları tek bir yerde (Base Class) toplayarak yazım yükünü azaltır. |
| Bakım Kolaylığı | Temel sınıfta yapılan bir değişiklik tüm alt sınıflara anında yansır. |
| Genişletilebilirlik | Mevcut kodu bozmadan yeni özellikler eklemeyi kolaylaştırır. |
Sonuç
Kalıtım, sınıflar arası ilişkiyi organize ederken projelerimize bir "soy ağacı" kazandırır. virtual ve override mekanizması ise bu ağacın dallarının kendine has meyveler vermesini sağlar. Ancak unutmayın; C#'ta bir sınıf sadece bir adet sınıftan miras alabilir (Single Inheritance).