C# Erişim Belirleyicileri (Access Modifiers)

Erişim Belirleyicisi: Program içerisinde tanımlanan metot ve özelliklere olan erişimin sınırlarını belirtmek için kullanılan kavramlar bütününe erişim belirleyicileri denir. C# dilinde 5 adet erişim belirleyici vardır. Bunlar:

PUBLİC
  • Tanımlanan sınıfın bir özelliğine ya da metoduna istenilen yerden erişime izin verilmiş olur.
  • Public üye elemanlar genelde sınıfın dışa sunduğu ara yüzü temsil eder.
  • Özetlemek gerekirse kullandığımız sistemde her yerden erişmek istediğimiz fonksiyon, özellik vs. için public tanımlaması yapılabilir.
PRİVATE
  • Tanımlanan üyelere ancak tanımlandıkları scope (yaşam alanı) içindeki diğer üye elemanlar erişebilir, bu alanın dışından doğrudan erişmek mümkün değildir. (Dolaylı yollardan nasıl erişilir onuda kapsülleme (encapsulation) nedir isimli yazımda anlattım.)
  • Erişim belirteci opsiyonel bir belirteçtir. Kullanılmaması halinde metot, class varsayılan olarak private olur.
  • Erişim belirteci private olan elemanlar kalıtım ile aktarılamaz.
     class Ornek1
     {
        string str1 = "Yazılım-101";
     }
     class Ornek2
     {
         public string str2= "Yazılım-101";
     }
     class Program
     {
         static void Main(string[] args)
         {
             Ornek o1 = new Ornek();
             Ornek2 o2 = new Ornek2();
             Console.WriteLine(o1.str1); //HATA
             Console.WriteLine(o2.str2);
             Console.Read();
         }
     }

Yukarıdaki örnekte hata alan kısmı inceleyecek olursak public ve private arasındaki farkı anlamış oluruz. Öncelikle şunu bilmeliyiz ki class içinde tanımlanan her şey default olarak private tanımlanmaktadır. Ornek1 isimli classtaki başında bir erişim belirleyicisi bulunmayan str1 isimli özellik default olarak private tanımlanmıştır. Yukarıda private özelliklerinden öğrendiklerimizle private bir özelliğe başka bir classtan direkt olarak erişemediğimizi biliyoruz. Bu yüzden yukarıdaki kodda derleme zamanında hata alırız.

PROTECTED
  • Sınıf türemesi yoksa private ile aynıdır. Fakat bir sınıftan başka bir sınıf türetiliyorsa private üyeler diğer sınıfa aktarılamaz. Sadece public ve protected elemanlar aktarılırlar.
  • Kod içindeki protected tanımlanan özelliğin bulunduğu sınıf ve ondan türetilen sınıflar tarafından erişilebildiğini gösterir.

Sadece sınıflar için kullanılan diğer erişim belirleyicileri :

INTERNAL
  • Internal olarak tanımlanan öğe, bulunduğu assembly’nin (Dll veya Exe dosyası) içinde erişilebilirdir.
  • Dll veya Exe dosyasının içerisinde erişim için kısıtlama yoktur, ama dışarıdan erişilemez. (Her hazırlanan proje farklı assembly dosyası oluşturur)
Internal ile ilgili örnek
Internal Örneği

PROTECTED İNTERNAL
  • Protected internal erişim belirleyicisi, protected ve internal erişim belirleyicilerinin VEYA (OR) işlemiyle birleştirildiği halidir.
  • Tanımlandığı classın içinde ve o classtan türetilmiş diğer classların içinde erişilebilir.
  • Ayrıca, aynı assembly içinde olmasalar dahi, tanımlandığı classtan türetilmiş diğer classların içinde de erişilebilir.
Protected internal ile ilgili örnel
Protected Internal Örneği

Bir konunun daha sonuna geldik. Konu hakkında soru ve görüşlerinizi belirtebilirsiniz. Herkese sağlıklı günler dilerim 🙂 . C356.