17 Kasım 2017 Cuma

C#'ta Kalıtım (Inheritance) - Kalıtımda Üye Erişimi - Part 2

Merhaba,

Bir önceki makalemizde kalıtıma giriş yapmıştık. Bu makalede ise üye erişimi konusunu inceleyeceğiz.

Bildiğiniz üzere OOP mimarisinde bir sınıfın private üyelerine dışardan erişim söz konusu değildir. Bu kural kalıtımda da geçerlidir. Yani bir A sınıfı, B sınıfını kalıtım yoluyla devraldığı zaman B'nin private üyelerine erişemez. Bu ilk bakışta ciddi bir kısıt gibi gözükebilir ama private üyelere dolayı yollardan erişim sağlanabilir. Örneğin; propertiesler sayesinde dolaylı erişim sağlanabilir.

 class A{
        private int x;
        public int X
        {
            get { return x; }
            set { x = value; }
        }
    }

    class B : A {   }

     static void Main(string[] args) {
            B b = new B();
            b.x = 10; //Hata!! private üyeye erişim yok
            b.X = 10; //Hata yok. public üye            
        }

Peki bazı özel durumlarda temel sınıfın private üyesine erişmemiz gerektiği durumda ne yapacağız? Üyeyi public hale getirirsek bu üyeye dışardan her türlü erişim mümkün olabilecek. Merak etmeyin, dil mühendisleri buna da çare bulmuşlar: protected üye. protected üyeler yalnızca kalıtım yoluyla aktarılan sınıflarca erişilebilmektedir. Dışardan erişim yine sözkonusu değildir. protected üye, türetilmiş sınıf için public özelliği gösterir. Fakat dışardan erişimler için yine privatedir.

Aşağıdaki örneği inceleyelim:

 class A{
        protected int x;
    }

    class B : A {
        public B(int _x) {
            this.x = _x; //Buraya dikkat! this.x ifadesi A'daki protected int x değişkenidir
            Console.WriteLine(x.ToString());
        }
    }

 static void Main(string[] args){
            A a = new A();
            a.x = 10;//Hata!! protected üyeye erişim yok
            
            B b = new B(10); //B classına göz atın
        }

Yukardaki örneği incelersek; A sınıfından bir nesne oluşturduğumuz zaman (A a = new A()) pretected int x; üyesine dışardan erişim sağlayamayız ama A'yı devralan B sınıfı this.x ile A'nın protected üyesine erişim sağlayabilmektedir. Bu kısma dikkat etmelisiniz.

Kalıtımda üye erişimiyle ilgili kısa bir bilgi vermiş olduk. Bir sonraki makalemizde Kalıtımda Yapılandırıcılar ve Ad Gizleme konusunu ele alacağız.

Sağlıcaklakalın...
Paylaş:

0 yorum:

Yorum Gönder

Bu Blogda Ara