Access Modifiers (Erişim Belirleyiciler) Nedir?

Erişim belirleyiciler, tanımlı değerlerin kod blokları içerisinde nereden erişilip erişileyemeceğini belirlememizi sağlamaktadır. Erişim belirleyicilerinin kullanım şekilleri aşağıdaki gibidir. C# ta 5 Erişim Belirleyici vardır;

  • public
  • private
  • protected
  • internal
  • protected internal

Private
Bir değer private olarak tanımlanırsa sadece tanımlı olduğu o class içerisinden erişileceği anlamına gelmektedir. Başka bir class içerisinden erişim sağlanamamaktadır.
Eğer tanımlanan bir tipin (class, değişken, metod, fonksyion) erişim belirteç tipi belirtilmezse varsayılan belirteç türü private olarak tanımlanmaktadır.

Public
Public olaran tanımlanan değerlere kod içerisinde her yerden erişim sağlanabilmektedir. Herhangi bir kısıtlama yoktur.

Protected
Protected olarak tanımlanan değerlere tanımlandığı class içerisinden veya türetilmiş(inherit edilmiş) olan diğer class’ lar içerisinden erişim sağlanmaktadır. İlgili class haricinde erişim halinde private olarak işlem görür ve erişim sağlanamamaktadır. ReadOnly’den farkı sadece inherit edilen classların içerisinden ulaşılabilmesidir, diğer classlardan ulaşılamaz ve görüntülenemez.

Internal
Internal olarak tanımlanan değerlere Assembly’ nin tüm alanlarından erişmek mümkündür. Fakat internal olarak tanımlanan değerlere farklı bir Assembly içerisinden erişim sağlanamamaktadır.

Protected Internal
Protected Internal olarak tanımlanan değerlere tanımlandığı class içerisinden ve türetilmiş olduğu diğer class’lar içerisinden erişim sağlanabilmektedir. Ayrıca farklı bir Assembly(Uygulama) içerisinde Protected Internal değerinin tanımlandığı class’ tan türetilmiş başka bir class içerisinden ilgili değere erişim sağlanabilmektedir. Bu erişim belirleyicisi protected ve internal belirleyicilerinden herhangi birisinin şartları sağlanmışsa yani öğeye tanımlandığı class içerisinden veya türetilmiş classlar içerisinden ya da aynı assembly içerisinden erişilebilir.

C# ta class ve struct lar için bir erişim belirleyicisi belirtilmez ise varsayılan olarak internal tanımlıdır, aynı zamanda class seviyesinde tanımlanan öğeler de (değişken, metot gibi) yine varsayılan olarak private erişim belirleyicisi ile tanımlanırlar. Burada bir noktayı belirtmekte fayda vardır; struct lar türetmeye girmedikleri ve desteklemedikleri için struct içerisindeki öğeler protected ve protected internal erişim belirleyicilerini alamazlar.