Kalıtım ve İsim Gizleme [6]

Bir türetilmiş sınıfın temel sınıftaki bir üye ile aynı ismi taşıyan bir üye tanımlaması mümkündür. Böyle bir durum söz konusu olunca temel sınıfın üyesi türetilmiş sınıf içindeki gizlenmiş olur. Bu, C#'ta teknik olarak bir hata olmasa da derleyici bir uyarı mesajı verecektir. Bu uyarı, bir ismin gizlenmekte olduğu gerçeğine işaret edecektir. Eğer niyetiniz temel sınıf üyesini gizlemek ise, bu durumda bu uyarıyı önlemek için türerilmiş sınıf üyesinin öncesinde new anahtar kelimesini kullanmalısınız. new'un bu kullanımının bir nesne örneği oluştururkenki kullanımından tamamen ayrı ve de farklıolduğunu kavrayın.

// Kalitim baglantili isim gizleme ile ilgili ornek.
using System;
class A {
public int i=0;
}

// Bir türetilmis sinif olustur.
class B : A {
new int i; // bu i, A'nin icindeki i'yi gizliyor.
public B(int b) {
i=b; // B'nin icindeki i
}
public void show() {
Console.WriteLine("i in derived class: " + i);
}
}

class NameHiding {
public static void Main() {
B ob=new B(2);
ob.show();
}
}

Öncelikle, B'nin içindeki i deklare edilirken new'un kullanımına dikkat edin. Aslında bu ifade, derleyiciye şunu anlatıyor: A temel sınıfı içindeki i'yi gizleyen i adında yeni bir değişkenin olduğunun farkındasınız. new'u dışarıda bırakırsanız bir uyarı mesajı üretilir.
Bu programdan elde edilen çıktı aşağıdaki gibidir:

i in derived class: 2

B, i adında kendi örnek değişkenini tanımladığı için A'nın içindeki i'yi gizlemektedir. Bu yüzden, show() metodu B tipinde bir nesne üzerinde çağırılırsa i'nin A içinde tanımlanan değeri değil de, B tarafından tanımlanan değeri ekranda gösterilir.

Kaynak: Herbert Schildt
Herkes İçin C#

Hiç yorum yok:

Yorum Gönder