Şubat 12, 2019

C# Erişim Belirleyiciler ve Birkaç Ufak Detay (Access Modifiers)

Okuma süresi: 2 dakika

Access Modifier’lar (erişim belirleyiciler) bir varlığın (sınıf, metod, değişken, interface vb.) erişilebilirliğini belirtmek için kullanılan keywordlerdir. Çalıştığımız bir projede güvenlik vb. gerekçelerle bazı varlıklara her yerden  erişilememesini veya tam tersi kolayca erişilebilmesini isteyebiliriz. Bu gibi durumlarda yardımımıza koşarlar.

Kullandığımız tasarıma göre en doğru access modifier seçimi yapmak proje büyüdükçe oluşabilecek çakışmalardan bizi koruyacak, kodumuzu daha tutarlı ve güvenli hale getirecektir.

C#’ta kapsamı en kısıtlayıcı olandan en genişine doğru “private, protected, protected internal, internal ve public” olmak üzere 5 çeşit access modifier bulunur.

Private

En katı şekilde kısıtlayıcı access modifier’dır. Belirttiği varlığı yalnızca yer aldığı kod bloğu içerisinde erişilebilir hale getirir. Blok dışından erişilemez.

Detay: Bir sınıf içerisindeki üyelerin, özellikle belirtilmediği sürece default access modifierları private‘tır.

Örneğin yukarıda Islem sınıfının içinde tanımlanan integer tipindeki sonuc değişkeni default olarak private kabul edilir ve sınıf sonlandığında erişilebilirliğini yitirecektir.

Protected

Protected tanımlanan varlık tanımlandığı sınıfın içerisinde erişilebilirdir. Bu yönüyle private’a benzese de aralarındaki fark protected tanımlanan varlıklar o sınıftan türetilmiş sınıflar içerisinden de erişilebilir hale gelmektedir.

Protected Internal

İlk kez duyanlar için sonrasında hatırlaması nedense zor gelen ancak adından gayet kolay çıkarımda bulunabilecek bir access modifier’dır. Tanımlandığı öğenin erişilebilirliğini protected ve internal erişim belirleyicilerinin OR (VEYA) işlemine tabi tutulmasıyla belirler. Yani daha da açıklayıcı olmak gerekirse, protected internal tanımlanan bir öğeye tıpkı protected tanımlanmış gibi tanımlandığı sınıfın içerisinden ve o sınıftan türetilmiş sınıflardan erişilebilir. Bu kısım protected access modifierından gelmektedir. Internal ile OR işlemine tabi tuttuğumuz için ek olarak, aynı assembly içerisinde olmasalar dahi tanımlandığı sınıftan türetilmiş diğer sınıflar içerisinden de erişilebilir.

Internal

Internal olarak tanımlanan bir öğeye bulunduğu assembly (exe veya dll dosyası) içerisinde her yerden erişilebilir.

Detay: Bir sınıfın özellikle belirtilmediği sürece default access modifier’ı internal‘dır. 

Public

Public olarak tanımlanan bir öğeye her yerden erişilebilir. Sınıf içerisinden veya sınıf dışından hatta farklı bir assembly (exe veya dll dosyası) üzerinden de referans olarak belirtildiğinde o öğe erişilebilir hale gelecektir.

Access Modifier’lara Dair Ek Birkaç Ufak Detay

  • Class veya Struct’lar public veya internal tanımlanabilirler. Struct’lar inheritance’ı desteklemediği için protected ve protected internal tanımlanamazlar.

 

Son olarak her şeyi bir tablo halinde görmek çok daha verimli olacaktır.

Access Modıfıer
Aynı Assembly İçinden
Farklı Assembly’ler İçinden
Tanımlandığı Sınıftan
Diğer Sınıflardan
Türetilmiş Sınıflardan
Diğer Sınıflardan
Türetilmiş Sınıflardan
PrivateErişilebilirErişilemezErişilemezErişilemezErişilemez
PublicErişilebilirErişilebilirErişilebilirErişilebilirErişilebilir
ProtectedErişilebilirErişilemezErişilebilirErişilemezErişilebilir
InternalErişilebilirErişilebilirErişilebilirErişilemezErişilemez
Protected InternalErişilebilirErişilebilirErişilebilirErişilemezErişilebilir

 

Share

Ceyhun Çözvelioğlu

Coffee Lover and Software Developer

You may also like...

Bir cevap yazın

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