Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

C# Inheritance(Kalıtım,Miras)

Şimdi bir şirketin hiyerarşisini oluşturalım.
Şirketin personellerini,satış danışmanlarını ve şirketin iş yaptığı müşterileri kalıtım yoluyla hiyerarşik bir şekilde yazalım.
Şimdi düşünelim,personellerin,müşterilerin ve satış danışmanlarının ortak özellikleri nelerdir.Hepsi bir insan olduğu için adı,soyadı,yasi vs.. gibi özellikleri ortak.O halde bunları kalıtımla alacakları bir sınıf oluşturalım.Ben bu sınıfa İnsan.cs ismini veriyorum.Şimdi bu sınıfı oluşturalım.

---İnsan.cs---
    class Insan
    {
        public string Adi { get; set; }
        public string SoyAdi { get; set; }
        public string Yasi { get; set; }
        public string Cinsiyet { get; set; }
    }

Yukarıda aklıma geldiği kadar ortak özellikleri yazdım.Şimdi personelin sınıfını oluşturalım.Personeller.cs isimli class dosyasın da hazırlıyorum.

---Personeller.cs---
    class Personeller:Insan
    {
        public string PersonelMaasi { get; set; }
        public string PersonelUnvani { get; set; }
        public string PersonelCalismaSuresi { get; set; }
    }

Şimdi Personeller.cs sınıfın da yazdıklarımız personellere has özelliklerdir.Yani her insanın maaşı,ünvanı ve calisma süresi olmaz.Bu yüzden dolayı bu özellikler Personeller.cs sınıfın da yazılmıştır.Insan.cs sınıfından diğer özellikleri kalıtım yoluyla alacağız.Bunuda sınıf isminin yanında “:” operatörü ile Base classımızın ismini yazarak gerçekleştiriyoruz.”class Personeller:Insan”, bu ifade sayesinde Insan.cs sınıfındaki özellikleri Personeller.cs sınıfına kalıtımla almış olduk.
Şimdi ise satış danışmanlarının sınıfını hazırlayalım.SatisDanismani.cs sınıfında hazırlıyorum.

---SatisDanismani.cs---
    class SatisDanismani:Personeller
    {
        public string SatisSayisi { get; set; }
    }

Şimdi dikkat ederseniz,SatisDanismani.cs sınıfının Base Classı Personeller.cs sınıfıdır.Bunun sebebi,satış danışmanları şirketimizin zaten bir personelidir.Ve personellerin has özellikleri satış danışmanında da olması gerekiyor.Bunuda Personeller.cs den kalıtımla alıyor.Şimdi soracaksınız.Peki satış danışmanının adı,soyadı vs.. gibi bilgileri yok mu? diye.Evet var.Personeller.cs sınıfı kalıtım yoluyla Insan.cs sınıfından o özellikleri aldığı için,otomatikman SatisDanismani.cs sınıfına da yansıyacaklardır.Hiyerarşiyi bu şekilde rahatça düzenleyebiliyoruz.Tabi her personellin yaptığı iş satış danışmanlığı olmadığı için, her personelin satış sayısı olmayacaktır.O yüzden kendine has özelliğini SatisDanismani.cs sınıfında yazdım.Diğer geri kalan özellikleri kalıtım yoluyla almış olacak zaten.
Şimdi de müşteriler sınıfını oluşturalım.Müşteriler bizim şirketimizin personeli olmadığına dikkatinizi çekerim.Bu sınıfı Musteriler.cs sınıfında oluşturuyorum.

---Musteriler.cs---
    class Musteriler:Insan
    {
        public string MusteriSirketi { get; set; }
    }

Müşteri de bir insan olduğundan olağan özellikleri Insan.cs sınıfından alıyor.Kendine has özelliği olan şirketini kendi sınıfına yazıyoruz.Bütün insanların şirketi yoktur.


Şimdi bu classların kullanımını görelim.

Solda gördüğünüz gibi Insan.cs sınıfından bir nesne oluşturduğumuz zaman , o sınıftaki oluşturulan metodları ve özellikleri görüyoruz.
Solda gördüğünüz gibi Personeller.cs sınıfından nesne ürettiğimiz zaman , o sınıftaki özelliklerden ziyade kalıtım aldığı Base Classındaki(Insan.cs) sınıfının özellikleri de görülmektedir.
Solda gördüğünüz gibi SatisDanismani.cs sınıfından nesne oluşturulduğu zaman, o sınıftaki property ve metodlar gözükmektedir.Base Classı Personeller.cs olduğu için kalıtımla özelliklerini ve metodlarını görüyor.Personeller.cs sınıfının Base Classı Insan.cs olduğu için otomatikman insandaki özellikler satış danışmanına yansıyor.Hiyerarşinin sebebi de budur.
Yanda gördüğünüz gibi Musteriler.cs sınıfından nesne oluşturduğumuz zaman, o sınıftaki özellik ve metodlarla birlikte kalıtım aldığı Insan.cs sınıfındaki özelliklerde gözükmektedir.
 Hiyerarşi yukarıda anlattığım gibidir.Genel mantık budur.Bu sistemi siz daha iyi geliştirebilirsiniz.
Buraya kadar giriş niteliğinde bir tanıtım yaptık.Sonraki sayfada mevzuya birazdaha derinden girelim.Kalıtımın sistematik mantığını inceleyelim.

Bunlar da hoşunuza gidebilir...

22 Cevaplar

  1. Ahmet dedi ki:

    Harika bir anlatımın var..Çok işime yaradı,çok teşekkür ederim.

  2. Gencay dedi ki:

    Asıl ben teşekkür ederim…Faydasını gördüyseniz ne mutlu bana 🙂

  3. ensar bağış dedi ki:

    Videonu izledim youtubedan ve buraya geldim. Çok güzel bir anlatımın var. Hep başarılı ol inşaallah böyle:)

    • Gençay dedi ki:

      Merhaba Ensar,
      Güzel yorumun ve iltifatın için teşekkür ederim.
      Allah hepimizde başarıyı nasip etsin…
      Güzel insansın, beni çok mutlu ettin…Allah’ta seni mutlu etsin…

  4. Tuna dedi ki:

    Abi harikasın.Çok iyi anlatmışsın.Ellerine sağlık teşekkürler.

  5. emrecan dedi ki:

    cok güzell anlatım cok başarılı biligilerden dolayı tsekrler..

  6. emrecan dedi ki:

    COK HARİKAA

  7. şule dedi ki:

    Şaka yoluyla cinsiyetçilik yapmanıza kızdım.

    • Gençay dedi ki:

      Bu kadar duyar kasarsanız muhabbetleri nesneler dünyasına sınırlandırırsınız.
      Cinsiyetçilik maksatlı bir içerik oluşturmadığımı sizlerde biliyorsunuz.

      Sevgiler…

  8. Tuğbaaaa dedi ki:

    Hocam hiç açıklayıcı olmamış.Ayrıca da cinsiyetçilik yapmışsınız hiç yakıştıramadım. Kendinize iyi mi baksanız bilemedim. Uhuf diyorum yalnızca. Muhabbetlerinizin nesneler dünyasında sınırlı kalmaması dileğiyle.

  9. Talat dedi ki:

    Merhaba hocam, kucuk bir sorum olacak entityleri olustururken bir classtan baska bir class’a miras verirsek base class’ in propertylerini bir alt class’ta kullanabilirmiyiz?

  10. cihan dedi ki:

    Merhaba elinize sağlık. Benim de bir sorum olacak. Base classta 100bin kayıttan oluşan bir object List oluşrutmak istiyorum Ve classtan türeyen classların bu listeye ulaşmasını istiyorum. Ancak anladığım kadarıyla türeyen her class için bu liste kopyalanacak bunu nasıl engelleyebiliriz. Teşekkürler

    • Gençay dedi ki:

      Merhaba,

      Öyle bir durumda ilgili listeyi farklı bir static class‘ta tutabilir ve ilgili sınıflarda çağırabilirsin.

      İyi çalışmalar.

  1. 19 Mart 2018

    […] erişim belirleyicileri hakkında C# Inheritance(Kalıtım,Miras) başlıklı yazımızda detaylı bir değerlendirmede bulunmuştuk. Bu erişim belirleyicilerinin […]

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir