9 Ocak 2013 Çarşamba

C# Sınıf Üyelerine Erişimi Kontrol Etmek

Verilerin paketlenmesi (encapsulation) özelliğini destekleme kapsamında sınıflar başlıca iki avantaj sağlar. Birincisi; sınıflar verileri kodlarla bağlar. İkincisi; sınıflar, üyelere erişimi kontrol altında tutmak için çeşitli yöntemler sağlarlar. C#' ta sınıf üyeleri iki temel tipte toplanır: public (açık) ve private (özel). Public üye, kendi sınıfının dışında tanımlanmış kodlar tarafından serbestçe erişilebilir. Private üye ise, yalnızca kendi sınıfı içinde tanımlanmış metotlar tarafından erişilebilir. Erişim, private üyelerin kullanımı sayseinde kontrol edilir. Bir sınıfın üyelerine erişimi kısıtlamak nesne yönelimli programlamanın en önemli özelliklerinden biridir; çünkü bu, bir nesnenin yanlış kullanımını önlemeye yardımcı olur.

C#' ta Erişim Belirleyicileri

Üye erişim kontrolü, dört adet erişim belirleyicisinden oluşur: public, private, protected ve internal. Bir sınıfın bir üyesi public belirleyicisi ile nitelendiğinde bu üye, programınızdaki herhangi bir kod tarafından erişilebilir. Bir sınıfın bir üyesi private olarak belirtilmişse bu üye, yalnızca kendi sınıfının diğer üyeleri tarafından erişilir. Böylece, diğer sınıflardaki metotlar bir başka sınıfın private verilerine erişemezler. Public ve private arasındaki farkı aşağıdaki örnekle daha iyi anlayabiliriz:

class MyClass
    {
        private int alpha;  // private erişim açıkça belirtilmiş
        int beta;          //  varsayılan erişim : private
        public int gamma; //   public erişim belirtilmiş

        public void setAlpha(int a)
        {
            alpha = a;
        }
        public int getAlpha()
        {
            return alpha;
        }
        public void setBeta(int a)
        {
            beta = a;
        }
        public int getBeta()
        {
            return beta;
        }
    }

    class AccessDemo
    {
        public static void Main()
        {
            MyClass ob = new MyClass();

            ob.setAlpha(-99);    // alpha ve betaya erişim yalnızca metotlar yardımıyla mümkündür.
            ob.setBeta(20);      // alpha ve betaya erişim yalnızca metotlar yardımıyla mümkündür.

            ob.alpha = -99;     // alpha ve betaya bu şekilde erişmezsiniz.
            ob.beta = 20        // alpha ve betaya bu şekilde erişmezsiniz.

            
           ob.gamma = 25;       // gamma' ya doğrudan erişim olabilir çünkü gamma public' tir.

        }
    }

Alpha ve beta, private üye oldukları için kendi sınıfları dışındaki kod tarafından erişilemezler. Bundan dolayı, AccessDemo sınıfı içinde bu iki değişkenin ikiside doğrudan kullanılamaz. Her ikisi de, public olan metotlar - ki bunlar mesela setAlpha() ve getAlpha() - yardıımıyla kullanılabilir.

0 yorum:

Yorum Gönder