Temel sınıf içerisinde bulunan elemanlardan public ve protected erişim belirteçli olanların kalıtım yoluyla Türetilmiş sınıfa aktarıldığından bahsetmiştik (Bkz: C# – Kalıtım). Peki Temel sınıfta ve Türetilmiş sınıfta aynı isme sahip elemanlar tanımlarsak ne olur?
class A { public string Uye_1="Temel Sınıfın Üyesi."; public string Uye_2() { return "Temel Sınıfın Üyesi."; } } class B : A { public string Uye_1 = "Türetilmiş Sınıfın Üyesi."; public string Uye_2() { return "Türetilmiş Sınıfın Üyesi."; } }
A Temel sınıf, B ise Türetilmiş sınıftır. Temel sınıfta ve Türetilmiş sınıfta aynı isme sahip elemanlar tanımladığımız için Visual Studio uyarı verecektir. Bu uyarının sebebi; Türetilmiş sınıf içerisindeki elemanların, aynı isimli Temel sınıf elemanlarını gizlemesinden kaynaklanmaktadır.
class Program { static void Main(string[] args) { B b = new B(); Console.WriteLine(b.Uye_1); Console.WriteLine(b.Uye_2()); } }
Türetilmiş sınıfın elemanları Temel sınıfın elemanlarını gizlediği için B sınıfından bir nesne oluşturup “Uye_1” ve “Uye_2” elemanlarına erişmek istediğimiz de B sınıfı içerisinde tanımlanmış olan “Uye_1” ve “Uye_2” elemanlarına erişebiliriz. Ekran çıktısı;
Türetilmiş Sınıfın Üyesi. Türetilmiş Sınıfın Üyesi. Press any key to continue . . .
Üye gizleme olayının gerçekleştiği durumlar da Visual Studio bu işlemi yanlışlıkla yaptığımızı düşünerek bize bir uyarı verecektir. Bu işlemi kontrollü bir şekilde yaptığımızı belirtmek için “new“ anahtar sözcüğünü kullanırız.
class A { public string Uye_1 = "Temel Sınıfın Üyesi."; public string Uye_2() { return "Temel Sınıfın Üyesi."; } } class B : A { new public string Uye_1 = "Türetilmiş Sınıfın Üyesi."; new public string Uye_2() { return "Türetilmiş Sınıfın Üyesi."; } }
Yapmış olduğumuz düzenlemeden sonra Visual Studio artık uyarı vermeyecektir. Peki Temel sınıf içerisinde ki “Uye_1” ve “Uye_2” elemanlarına nasıl erişebiliriz ?
Temel sınıf içerisindeki “Uye_1” ve “Uye_2” elemanlarına Türetilmiş sınıf içerisinden erişebilmek için “base“ anahtar sözcüğünü kullanırız. Base anahtar sözcüğü türetmenin yapıldığı temel sınıfı temsil eder. Base anahtar sözcüğünün kullanımına Yapıcı Metotlar ve Kalıtım konusunda da değinmiştik.
class A { public string Uye_1="Temel Sınıfın Üyesi."; } class B : A { new public string Uye_1 = "Türetilmiş Sınıfın Üyesi."; public void Goster() { Console.WriteLine(Uye_1); // Türetilmiş Sınıfın Üyesi. Console.WriteLine(base.Uye_1); // Temel Sınıfın Üyesi. } }
Serdar YILMAZ