NTP C# Dersi 13: Yapılara Erişim İzinleri

Merhaba arkadaşlar, başlatmış olduğumuz kod kütüphanesi projemize devam edeceğiz. Projeye devam etmeden önce, sınıf oluştururken dikkat etmemiz gereken bazı komutlardan bahsetmem gerekiyor.

Sınıflara daha doğrusu yapılara erişim izinlerini belirlemeden bahsedeceğiz. Erişim izni demek; Bir yapının veya metotlarının kim tarafından, nereden, nasıl bir şekilde erişilebilir olduğu, demektir.

Erişim izinlerini, yapıyı oluştururken static komutu gibi yapının türünün önüne izin komutunu kodlayarak belirliyoruz. Erişim izni mi yoksa yapının statik olduğunu belirleyen static komutu mu önce gelecek gibi bir soru kafanıza takılırsa hiç fark etmiyor arkadaşlar, static komutu veya erişim komutu da önce gelebilir. Dikkat etmemiz gereken yapının türünün yapı isminden önce gelmesi gerektiğidir.

Erişim İzinleri

1) Public
2) Private
3) Protected
4) Internal
5) Protecred Internal

Public

Public(tr:ortak) komutu yapıya her yerden erişime izin verir. Kısacası yapıya erişime hiçbir sınır getirilmemiştir.

Private

Private(tr:özel) komutu yapıya sadece o yapı içerisinden erişime izin verir. Mesela private “A” sınıfının public “B” metodunu sadece o sınıf içerisindeki “C” metodu kendi kodları içerisine çağırabilir. Başka bir yerden erişim olanaksızdır. C metodunun erişim izni belirlenmediği için private olarak kabul edilir. Private A sınıfı içinde bir de D metodu olduğunu düşünelim. D metodundan B metoduna erişim mümkündür. Fakat D metodundan C metoduna erişim mümkün değildir. C metoduna da erişimin mümkün olabilmesi için C’nin de public olarak belirlenmesi gerekir.

Protected

Protected(tr:korumalı) erişim türünde tanımlanmış üyelere tanımlandık sınıf ve bu sınıftan türetilmiş diğer sınıflardan erişim izni verilmiş olur.

Internal

Internal(tr:içerisi), yapıya aynı Assembly yani kütüphane içerisinde erişime izin verir. Classlar ya da structlar varsayılan olarak internal erişim iznine sahiptir.

Protected Internal  

Protected ile internal komutlarının veya(“||”) komutu ile birleştirilmiş halidir. Yani protected ile internal birlikte kullanıla bilinir.

 

using System;
namespace yGLibrary
{
    /// <summary>
    /// Matematiksel fonksiyonları barındıran class
    /// </summary>
    public static class Matematik
    {
         // [-Q]: Girilen sayının istenilen kuvveti veren metot.
         // public static int KuvvetAl(int sayi, int kuvvet);
         // metot “NTP C# Dersi 12: Kütüphane(Class Library) Projesi” dersimizde…

 

        /// <summary>
        /// [-T]: Bir sayının asallığını kontrol eder.
        /// </summary>
        /// <param name=”sayi”>Kontrol edilecek -int- sayı</param>
        /// <returns>Sayı asal ise -true- değil ise -false- döner.</returns>
        public static bool AsalMi(int sayi)
        {
            bool cevap = false;
            if (sayi > 1) // [01]:
            {
                cevap = true;
                int modd;
                int tester = 2;
                while (tester < sayi) // [02]
                {
                    modd = sayi % tester; // [03]
                    if (modd == 0) { cevap = false; break; } // [04]
                    tester++;
                }
            }
            return cevap;
        }
        // [01]: Önce “sayi”nın 1 den büyük olup olmadığını kontrol ettik. Çünkü en küçük asal sayı 2’dir.
        // [02]: “tester” dahil “tester”dan yani 2’den “sayi” hariç “sayi”ya kadar çalıacak bir while döngüsü kurduk. M.G.: [2,sayi)
        // M.G. = Matematiksel Gösterim
        // [03]: “sayi”nin “tester”a bölümünden kalanını “modd”a yükledik. M.G.: sayi ||| modd (mod tester)
        // not: (||| = üç çizgili eşittir, modd = değişken, mod = matematikte kullanılan mod alma işareti)
        // [04]: modd 0 ise “cevap”a false değerini yükledik. döngüyü kırdık. Çünkü asal sayı kendinden ve 1 başka sayıya bölünmez.

 

        /// <summary>
        /// [-U]: Belirtilen sayıdan bir sonraki asal sayıyı verir.
        /// </summary>
        /// <param name=”sayi”>Belirtilen sayı</param>
        /// <returns></returns>
        public static int SonrakiAsal(int sayi)
        {
            while (true)
            {
                sayi++;
                if (Matematik.AsalMi(sayi)) break;
            }
            return sayi;
        }

 

        /// <summary>
        /// [-V]: Belirtilen sayıdan bir sonraki asal sayıyı verir.
        /// </summary>
        /// <param name=”sayi”>Belirtilen sayı</param>
        /// <returns></returns>
        public static int OncekiAsal(int sayi)
        {
            while (true)
            {
                sayi--;
                if (Matematik.AsalMi(sayi)) break;
            }
            return sayi;
        }

 

        /// <summary>
        /// [-W]: Belirtilen sayıya en yakın asal sayıyı verir.
        /// </summary>
        /// <param name=”sayi”>Belirtilen sayı</param>
        /// <returns></returns>
        public static int EnYakinAsal(int sayi)
        {
            int cevap = 0;
            int once = Matematik.OncekiAsal(sayi);
            int sonra = Matematik.SonrakiAsal(sayi);
            int farkonce = sayi - once;
            int farksonra = sonra - sayi;
            if (farkonce < farksonra) cevap = farkonce;
            else cevap = farksonra;
            return cevap;
        }
    }
}



Erişim Kısıtlamalarını Neden Getiririz ?

Kullanıcının, metodumuza erişmesini istemeyebiliriz. Bunun bir sebebi olmasına gerek yok. Veya metot kullanışsızdır. “Kullanışsız ise neden kütüphanende kodladın ki bu metodu ?” diye soru soranlar olabilir. AsalMi metodundan örnek vereyim. Mesela AsalMi metodu gayet mantıklı bu yüzden bu metot kullanışsız değil. Ama çok gereksiz bir metot olduğunu düşünelim. AsalMi metodunu ilkel bir metot olsun. Yani asal sayıların 2’den başladığını bildiğimiz için metotta sayının 1’den büyük olup olmadığının kontrolünü (satır: [-T] > [01]) gereksiz görüp hızı arttırmak için kaldırabiliriz. Fakat kullanıcı buraya bir değişken atadığında programın hata verme olasılığı var. Erişim kısıtlaması da yapmasıydık. Kullanıcı bu gereksiz metoda ulaşır ve faydalı bir sonuç alamayınca da kütüphanemiz hakkında olumsuz fikirler besleyebilir. Bu olasılıklardan kurtulabilmek için AsalMi metodunu internal erişim izni ile oluştururuz.

Görüşmek üzere, iyi çalışmalar arkadaşlar…

Önerilen diğer yazılar:
NTP C# Dersi 12: Kütüphane(Class Library) Projesi

Yorum Yap

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>