C# Inheritance(Kalıtım,Miras)
Bu yazım da C#’ta inheritance(Kalıtım,Miras) kavramından bahsedeceğim.Inheritance,OOP(Object Oriented Programming – Nesne Yönelimli Programlama) tekniklerinden birisidir.Sınıflar arası hiyerarşik yapı kurabilmek, oluşturmak için kullanılır.Bir sınıf,başka bir sınıftan türeyerek(kalıtım alma) , o sınıfın public ve protected tanımlı yapılarını devralır.Kalıtım alan sınıfa : Derived Class , kalıtım veren sınıfa : Base class denir.Türeyen sınıf,türeten sınıf olarak isimlendirilir.
ACCESS MODIFIERS (ERİŞİM BELİRLEYİCİLERİ)
Protected
Eğer bir class içerisinde bir eleman,bir metod protected olarak tanımlanmışsa, o yapı o class için private ve o classtan türeyen classlar için public davranış sergiler.Yani protected elemanlar sadece o class ve o classtan türeyen classlar da kullanılabilirler.O classtan türemeyenler de kullanılmazlar.
Internal
Eğer bir class içindeki ifade internal ile işaretlenmişse sadece o assembly(o solution, o exe) içinde kullanılabilirler(Kalıtım alsın ya da almasın).Diğer yerlerde kullanılmaz.Mesela bir .dll projesi içindeki bir classta internal işaretli yapılar, o .dll in eklenip kullanıldığı başka solutionlar içindeki yapılarda kullanılamazlar.
Protected Internal
Başka bir assembly içinde, eğer bir class, bu assemblydeki bir classtan türemişse,o class içindeki protected internal ifadeler protected olmalarından dolayı kullanılabilirler, ama türemeyen classlar içinde bu elemanlar aynı zamanda internal oldukları için kullanılamazlar.
Public ve Private
Bu erişim belirliyicilerini zaten biliyoruz.Birdaha değinmek gerekirse;
Public erişim belirleyicisi ile oluşturulan metod ya da property ler oluşturulduğu class dısından da erişilebilir.
Private erişim belirleyici ile oluşturulan metod ya da property ler oluşturulduğu class dışında başka bir class ta kullanılamazlar.
C# da oluşturulan her class aslında Object classından türemiştir.Yani her class object classından otomatik türetilir.Bir sınıf yazıp,oluşturduğumuz sınıftan nesne yaratırsak eğer,o nesnenin içinde otomatikman Equals(),GetHashCode(),GetType() ve ToString() metodlarını görürüz.Halbuki biz bu metodları sınıfımıza yazmamıştık.Bu metodlar Object sınıfından kalıtım yoluyla gelirler.Her nesneden ulaşılabilen bu metodlar aslında object sınıfının metodlarıdır.
Bir sınıf sadece tek bir sınıftan kalıtım alabilir.Aynı anda birden fazla sınıftan kalıtım alamaz.Fakat ileride göreceğimiz interface yapıları kullanılarak bu sıkıntı aşılacaktır.
Türeten sınıf(base class) , türeyen sınıf(derived class) için base olarak kabul edilir.Yani her sınıfın base si,kendi türediği sınıftır.Hiyerarşinin en tepesindeki sınıf her sınıfın base i değildir.Yani;
A->B B->C(A dan B türesin,B den de C türesin).Burada C nin basesi B sınıfıdır.A sınıfı C nin basesi değildir.Her sınıfın basesi türediği sınıfıdır.
Şimdi bu sayfada kalıtımla ilgili teorik olarak bilgiler verdim.İkinci sayfada mantığıyla ilgili konuşalım.

Harika bir anlatımın var..Çok işime yaradı,çok teşekkür ederim.
Asıl ben teşekkür ederim…Faydasını gördüyseniz ne mutlu bana 🙂
Videonu izledim youtubedan ve buraya geldim. Çok güzel bir anlatımın var. Hep başarılı ol inşaallah böyle:)
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…
Eline emeğine aklına sağlık tüm yazılarını kronolojik olarak okumaya çalışıyorum okudukça okuyasım geliyor sakın kapatma bu siteyi 🙂
Bol bol faydalanmanız dileğiyle…
Sevgiler.
Abi harikasın.Çok iyi anlatmışsın.Ellerine sağlık teşekkürler.
Merhaba Tuna,
Bende sana güzel geri dönüşün için teşekkür ederim…
cok güzell anlatım cok başarılı biligilerden dolayı tsekrler..
Faydalandıysanız ne mutlu… 🙂
COK HARİKAA
Şaka yoluyla cinsiyetçilik yapmanıza kızdım.
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…
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.
Hadi ordan 🙂 Böyle öğrenci mi olur yhau?
Kesinlikle ideal öğrenciyim itiraf edebilirsiniz . Güldünüz yakaladım 😀 Plak var hocam mouse isterseniz eğer 😀 güzel yarınlar güzel insanlar sizlere selam olsun. Hadi Allaha emanet…
Kesinlikle ideal öğrenciysen vay halimize 🙂 Sanada selam olsun. Allahaısmarladık…
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?
Merhaba,
Kalıtımsal olarak aktarılacağı için kullanabilirsin.
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
Merhaba,
Öyle bir durumda ilgili listeyi farklı bir static class‘ta tutabilir ve ilgili sınıflarda çağırabilirsin.
İyi çalışmalar.