protected Erişimi Kullanımı [3]

Diğer bölümde açıklandığı gibi, bir temel sınıfın bir private üyesi bir türetilmiş sınıf tarafından
erişilemez. Yani bir türetilmiş sınıfın temel sınıfın içindeki bazı üyelere erişebilmesini istiyorsanız,
türetilmiş sınıfın public olması gerekir.
Fakat şöyle bir durum daha vardır: C# size bir korumalı üye oluşturmanıza olanak tanır. Bir korumalı üye, sınıf hiyerarşisi içinde public'tir ama hiyerarji dışında privatedir. Korumalı üye protected erişim niteleyicisi kullanılarak oluşturulur. Bir sınıfın bir üyesi protected olarak deklare edilirse, söz konusu üye privatedir(önemli bir istisna haricinde). protected üye kalıtım yoluyla aktarıldığı zaman, istisnai durum ortaya çıkar. Bu durumda, temel sınıfın protected üyesi türetilmiş sınıfın protected üyesi halini alır ve böylece türetilmiş sınıf tarafından erişilebilir. Böylece protected niteleyicisini kullanarak, kendi sınıflarında private olan fakat yine de kalıtım yoluyla aktarılabilen ve bir türetilmiş sınıf tarafından erişilebilen sınıf üyeleri oluşturabilirsiniz.
Aşağıda, protected niteleyici kullanan basit bir örnek görüyorsunuz.

//protected'i tanitir.

using System;
class B {
protected int i,j; // B'de private, fakat D tarafından erisilebilir.
public void set(int a, int b) {
i = a;
j = b;
}

public void show() {
Console.WriteLine(i + " " + j);
}
}

class D : B {
int k; // private
//D, B'nin i ve j üyelerine erişebilir
public void setk() {
k = i * j;
}
public void showk() {
Console.WriteLine(k);
}
}

class ProtectedDemo {
public static void Main() {
D ob = new D();

ob.set(7, 9); // OK, D tarafından bilinir
ob.show(); // OK, D tarafından bilinir

ob.setk(); // OK, D'nin bir parçası
ob.showk(); // OK, D'nin bir parçası
}
}

Bu örnekte B, kalıtım yoluyla D'ye aktarıldığı için ve B'nin içinde i ve j protected olarak deklare edildikleri için, setk() metodu bunlara erişemez. Eğer i ve j, B tarafından private olarak tanımlanmış olsalardı D'nin bunlara erişimi olmayacaktı ve program derlenmeyecekti.
Tıpkı public ve private gibi, hangi sasayıda kalıtım katmanı dahil edilmiş olursa olsun protected statüsü üye ile birlikte kalır. Bu yüzden, bir türetilmiş sınıf bir başka türetilmiş sınıf için temel sınıf olarak kullanılırken, ilk türetilmiş sınıf tarafından kalıtım yoluyla elde edilen ilk temel sınıfın herhangi bir protected üyesi, ikinci türetilmiş sınıfa da aynen protected olarak kalıtım yoluyla aktarılır.

Kaynak: Herberth Schildt
Herkes İçin C#


Hiç yorum yok:

Yorum Gönder