Ders-18 OOP Inheritance(Kalıtım) -2

Daha önce oluşturduğumuz nesnelerde istisnasız dört adet fonksiyonun geldiğini görmüştük. Bunlar Equald, GetHashCode, GetType, ToString metotlarıydı. Bunlar nereden geliyor sorusunun cevabı:

Nesnelerin Atası / Ademi Object Türü

C# programlama dilinde tüm sınıflar istisnasız bir şekilde Object sınıfından türetilir. Herhangi bir class oluşturduğumuz zaman o class otomatik olarak compiler seviyesinde object sınıfından türer.

Object sınıfının C# dilinde temel-base class olarak tanımlanan sınıftır.

Object’den bütün nesnelerin türemesinden dolayı Object büütün değerleri karşılayabilmektedir.

object name = "John"
object age = 20;

Eğer bir class Object haraci bir class’dan kalıtım alıyorsan kalıtım aldığı class’dan object’e ulaşır. Yani Bir class yalnızca bir class’dan türeyebilir ancak türetildiği base veya ata class’ın türetildiği class her zaman Object class’ı dır.

İsim Saklama(Name Hiding) Sorunsalı

Kalıtım durumunda atalardaki herhangi bir member ile aynı isimde member’a sahip olan nesneler olabilmektedir.

Hem base class’da he child class’da aynı isimde member mevcut ise biz buradki member’ın hangi class’dan geldiğini bilemeyiz. Bilememe durumuna Name Hiding yani İsim Saklama denir.

class A
{

   public int X{get; set;}

}

class B:A
{

   public int X{get; set;}

}

Eskiden bu kullanımda hata alınmaktaydı. Bunun için child class’ta yinelenen değişken ismi new ile tanımlanmak zorundadı. Şimdi ise herhangi bir hata vermemekte fakat uyarı vermektedir. Uyarıya göre yinelenen değişken çağrıldığında child’dan çağrılacağı şeklindedir.

Eski kullanımda new keyword’ü kullanıp yinelenen değişkenin kullanacağımızı(Name Hidding durumunu) compiler’ bildirmemiz gerekiyordu.

class A
{

   public int X{get; set;}

}

class B:A
{

   public new int X{get; set;}

}

Record’lar da Kalıtım

  • Record’lar sade ve sadece Record’lar dan kalıtım alabilmektedirler.
  • Class’lar dan kalıtım alamazlar yahut veremezler.
  • Kalıtım tüm temel kurallarım record’lar için geçerlidir.
  • Bir record aynı anda birden fazla record’dan kalıtım alamaz.
  • Record’lar da temelde clas oldukları için üretilir üretilmez otomatik olarak Object’den türerler.
  • base ve this keywordleri aynı amaçla kullanılabilmektedir.
  • Name Hiding söz konusu olabilmektedir.

Bir yanıt yazın

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