Inheritance(Kalıtım)
Kalıtım OOP’nin en önemli özelliiğidir. Üretilen nesneler farklı nesnelere özelliklerini aktarabilmekte ve böylece hiyerarşik bir düzenleme yapılabilmektedir. Kullanımında kod maaliyeti düşer ve mimarisel tasarım açısından avantaj sağlamaktadır.

Örnek olarak Kadın ve Erkek isminde iki class oluşturmuş olalım. Bu class’lara Erkek ve Kadın ile ilgili propertyler ekleyecek olsak hem Erkek hem de Kadın classları içerisinde bulunacak aynı isimde propertyler olacaktır. İsim, Yaş, Boy gibi ortak özellikleri Burada yapılması gereken bu ortak özellikleri örnek olarak İnsan isimli bir class içerisinde tanımlayarak Erkek ve Kadın classlarına İnsan sınıfını miras vermek, yani kalıtım yapmak olacaktır. Böylelikle Yaş gibi ortak özellik barındıran propertyleri hem Erkek hem de kadın sınıfında tanımlamak yerine yalnızca bir kere İnsan sınıfında tanımlamış olacağız.
Nesne tabanlı programlamada, benzer/aynı olgudaki nesnelerin aynı olan memberları/özellikleri/içerikleri eğer ki bu şekilde her sınıf içinde tekrar tekrar tanımlanmışsa bu aykırı bir durumdur.
Aynı olguda olan sınıfların tekrar eden memberları bir başka sınıfta toplamalıyız ve oradan ilgili sınıflara kalıtımsal olarak aktarmalıyız.
Kalıtım düzensiz bir şekilde tasarlanmamalıdır. Ortak olguda olan nesneleri temsil edecek olan bir üst ve daha evrensel nitelikte olgu olmalıdır. Opel, Mercedes ve Fiat olarak olgudur. Yani üçüde bir arabadır. Haliyle bunların daha evrensel üst biteliği Araba olarak nitelendirilebilir.
Kalıtım operasyonunda, kalıtım veren sınıfın erişilebilen tüm memberları kalıtım alan sınıfa kalıtsal olarak aktarılcaktır.
C# Programlama Dilinde Hangi Yapılar Kalıtım Alabilirler?
C# programlama dilinde kalıtım sınıflara özel bir niteliktir.
Yani bir sınıf sade ve sadece bir sınıftan kalıtım alabilir.
Record’lar da kalıtım alabilmekte. Lakin sadece kendi aralarında. Kalıtım alabildikleri tek istisnai sınıf ise Object sınıfıdır.
Object sınıfı kalıtımda önemli bir rol oynayan özel bir sınıftır (işin Adem’i dir.).
C#’ta Kalıtım Nasıl Alınır?
C# ta iki sınıf arasında kalıtımsal ilişki kurabilmek için ‘:'(iki nokta üst üste) operatörünü kullanmaktayız.
Hatta bilsekte bilmesekte kalıtımsal tüm ilişkiler ‘:’ operatörü tarafından yapılmaktadır.


Kalıtım, operasyonel olarak gerçekleştirildikten sonra compiler seviyesinde member aktarımı sağlanır.
Kullanımı
class Personel{
public string Adi{get; set;}
}
class Yazilimci : Personel{
public string[] KullandiğiDiller {get; set;}
}
Yazilimci yazilimci = new Yazilimci();
yazilimci.Adi = "John";
Örnekte kalıtım yoluyla Personel klasındaki property Yazilimci klasına miras-kalıtım veriliyor ve Yazilimci klasından direkt olarak property’ye erişim sağlanılabiliyor.