Kalıtım, nesne yönelimli programlamanın temel kavramlarından biridir ve genellikle OOP’nin en önemli konularından biri olarak kabul edilir. Kalıtım, nesneler arasında özelliklerin ve davranışların paylaşılmasını sağlar, bu da kodun yeniden kullanılabilirliğini artırır ve kod tekrarını önler. Bir programcı açısından kalıtım, benzer özelliklere sahip nesnelerin tekrar tekrar tanımlanması yerine, bu özelliklerin bir üst sınıfta tanımlanmasını ve alt sınıfların bu özellikleri miras almasını sağlayarak kodun daha temiz ve organize olmasını sağlar. Bu sayede kod maliyeti düşer ve mimari tasarım açısından avantajlar sağlanır.
Kalıtımın kullanılmadığı durum

Bu örnekte, gereksiz şekilde uzatılmış olabilir düşüncesine kapılabilirsiniz. Aynı özellikleri tekrar tekrar yazmak pek istenmeyen bir durum olabilir. Tekrar etme, kod yazımında istenmeyen bir durumdur.
kalıtımın kullanıldığı durum

Kalıtım işlemi sırasında, kalıtım veren sınıfın erişilebilir tüm üyeleri, kalıtım alan sınıfa miras olarak aktarılır. Nesne yönelimli programlamada, kalıtım, nesnelerin birbirlerinden türemesini sağlayan temel bir özelliktir.
C# programlama dilinde hangi yapılar kalıtım alabilirler?
C# programlama dilinde, kalıtım özelliği sınıflara özgü bir niteliktir. Bir sınıf, sadece ve sadece bir başka sınıftan kalıtım alabilir.
C#’ta kalıtım nasıl anılır ? : Operatörü
C#’ta iki sınıf arasında kalıtımsal ilişki kurabilmek için :
operatörü kullanılır. Bu operatör, kalıtım ilişkisinin kurulduğu yerdir ve tüm kalıtımsal ilişkiler bu operatör aracılığıyla sağlanır.

Base Class ve Derived Class nedir?
Base veya Parent Class terimi, kalıtımı veren (üst) sınıfı ifade ederken, Derived veya Child Class terimi, kalıtımı alan (alt) sınıfı ifade eder. Bu terimler, kalıtım ilişkisindeki sınıfları tanımlamak için kullanılır.
Base Class (Ana Sınıf): Base Class, kalıtım veren sınıfı ifade eder. Kalıtımı alan sınıflar, Base Class’tan özelliklerini ve davranışlarını miras alır. Base Class genellikle daha genel ve kapsamlı bir yapıyı temsil eder.
Derived Class (Türetilmiş Sınıf): Derived Class, kalıtımı alan sınıfı ifade eder. Bu sınıflar, Base Class’tan miras aldıkları özelliklere sahiptir ve genellikle daha özelleştirilmiş veya spesifik bir yapıyı temsil ederler.

Base class ve derived class örnek yapalım.

Atalar tüm torunların base Class’ı mıdır? Hayır, bir class’ın sadece bir tane base class’ı olur. Ancak, atalarındaki tüm sınıflar Base Class’ı değildir.
Peki, bir class’ın birden fazla derived class’ı olabilir mi? Evet, derived class’ı olabilir.
Yani, bir çocuğun bir babası vardır, birden çok babası olmaz; ama bir babanın birden fazla çocuğu olabilir
Kalıtımın altın kuralı!
Bir sınıfın yalnızca bir Base Class’ı olabilir. Bu kuralın nedeni, C# programlama dilinde bir sınıfın yalnızca bir sınıftan türetilmesine izin verilmesidir. Aynı anda birden fazla sınıftan türetilme işlemi gerçekleştirilemez.
Kalıtımda nesne üretimi sırası
Bir sınıftan nesne üretimi gerçekleştirilirken, eğer kalıtım aldığı üst sınıflar varsa, önce o sınıflardan sırayla nesneler üretilir.

Bir sınftan base class constructor’ına ulaşım
Herhangi bir sınıftan nesne üretimi gerçekleştirilirken öncelikle base class’tan nesne üretilir, bu da base class’ın constructor’ının önce tetiklendiği anlamına gelir. Dolayısıyla, nesne üretimi sırasında base class’ta oluşturulacak nesnenin istediğimiz constructor’larını tetikleyebilmeli veya varsa parametre değerlerini verebilmeliyiz.
Bu gereksinimi karşılamak için base anahtar kelimesini kullanırız. Eğer base class’ın constructor’ı sadece parametre alan bir constructor ise, derived class’larda o constructor’a bir değer göndermek zorundayız. Bunun için base anahtar kelimesini kullanırız.
Eğer base class’ta boş parametreli bir constructor varsa, derived class’ta base ile bir bilgilendirme bulunmak zorunda değiliz. Çünkü kalıtımsal durumda varsayılan olarak boş parametreli constructor tetiklenir.

base keyword vs this keyword

This anahtar kelimesi, bir sınıftaki constructor’lar arasında geçiş yapmamızı sağlar.
Base anahtar kelimesi ise, bir sınıfın base class’ının constructor’larını tetikleyeceğimizi ve varsa parametrelerini derived class’tan alacağımızı belirler.
Ayrıca, this anahtar kelimesi, ilgili sınıfta o anki nesnenin üyelerine erişmemizi sağlarken, base anahtar kelimesi de base class’taki üyelere erişmemizi sağlar.

Nesnelerin Atası/Ademi Object Türü
Nesnelerdeki ToString, Equals, GetHashCode ve GetType methotları nerden gelmektedir?

C# programlama dilinde tüm sınıflar Object sınıfından türemektedir. Bu metotlar Object sınıfına ait olan metotlardır.
Bu konuya polimorfizm konusunda daha detaylı değineceğiz. Eğer bir sınıf herhangi bir kalıtım almazsa, varsayılan olarak Object sınıfından türetilir. Yani, bir sınıfın belirli bir üst sınıfı yoksa, C# otomatik olarak bu sınıfı Object sınıfından türetir. Ancak, eğer bir sınıf başka bir sınıftan kalıtım alıyorsa, aynı anda birden fazla sınıftan kalıtım alamaz. Dolayısıyla, bir sınıf yalnızca kalıtım aldığı sınıftan türeyebilir. Bu durumda, eğer başlangıç sınıfı herhangi bir sınıftan kalıtım almazsa, en nihayetinde Object sınıfından türetilir.
İsim saklama(Name Hiding) sorunsalı
İsim saklama (Name Hiding) sorunsalı, kalıtım durumunda ata sınıftaki herhangi bir üye ile aynı isme sahip olan üyelerin türetilen sınıflarda olabilmesini ifade eder. Eskiden bu durumu belirtmek için new anahtar kelimesi kullanılması gerekiyordu, ancak yeni güncellemelerle artık bu zorunlu değildir. Burada, en son tanımlanan üye geçerli olacaktır.

ovirride örnek ve tanım yok
part 6’da anlatıldı