Bu yazıda, C#’daki erişim belirleyiciler (access modifiers) türlerini ve amaçlarının ne olduğunu açıklayacağız.
Erişim belirleyiciler (access modifiers), C# projesinde bir nesnenin ve tüm üyelerinin erişilebilirliğini belirtir. Ayrıca, tüm C# türlerinde, belirtilmemiş olsalar bile erişim değiştiricileri uygulanır. (varsayılan erişim belirleyici uygulanır).
Erişim Belirleyiciler Neden Kullanılır?
Oluşturulan uygulamaların güvenliğini artırmak için, kullanılan sınıfların (class) erişilebilirliğinin kısıtlanması gerekmektedir. Bu anlamda, erişim belirleyiciler (access modifiers) koda dışardan yapılmak istenen müdahalenin sınırlarını belirlemek amacıyla kullanılan anahtar ifadelerdir.
Erişim Belirleyici (Access Modifiers) Türleri
C# dört tür erişim belirleyici sağlar: private, public, protected, internal ve ikili kombinasyon: protected-internal ve private-protected.
Private Access Modifier
Private olarak tanımlanan nesnelere yalnızca bir sınıf veya yapı içinde erişilebilir. Program içinde kesinlikle değiştirilmemesi gereken, kritik kodlarda kullanılmaktadır. Sonuç olarak, oluşturuldukları sınıfın dışında onlara erişemiyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class NumberClass { private int sayi = 10; } class Program { static void Main(string[] args) { NumberClass num = new NumberClass(); Console.WriteLine(num.sayi); // Hata. sayı değişkenine erişemiyoruz çünkü // private türüne sahiptir ve yalnızca NumberClass sınıfında erişilebilir } } |
Public Access Modifier
Public erişim belirleyicileri uygulanan nesnelere projemizde her yerden erişilebilir. Bu nedenle, Public erişim belirleyici tipinde hiç bir kısıtlama yoktur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class NumberClass { public int sayi = 10; } class Program { static void Main(string[] args) { NumberClass num = new NumberClass(); Console.WriteLine(num.sayi); // Hata yok. sayi değişkeni, public erişim belirleyicidir. } } |
Protected Access Modifier
Protected anahtar kelimesi, nesnenin sınıf içinde ve o sınıftan türetilen tüm sınıflarda erişilebilir olduğunu ima eder.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class NumberClass { protected int number = 10; //bu değişkene bu sınıfın içinden erişebiliriz } class DerivedClass : NumberClass //bu sınıf miras almıştır. DerivedClass, NumberClass sınıfından türetilir { void Print() { Console.WriteLine(number); //NumberClass sınıfından türediği için ona bu sınıftan da erişebiliriz. } } class Program { void Print() { NumberClass num = new NumberClass(); Console.WriteLine(num.number); // Hata. Koruma seviyesi nedeniyle sayı değişkenine erişilemez. // Program sınıfı NumberClass'tan türetilmez } } |
Internal Access Modifier
Internal anahtar sözcüğü , nesneye yalnızca kendi derlemesi içinde erişilebilir olduğunu, ancak diğer derlemelerde erişilemeyeceğini belirtir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | //Project 1 (ASSEMBLY) public class NumberClassInFirstProject { internal int number = 10; //bu değişkene bu sınıfın içinden erişebiliriz } class ProgramInFirstProject { void Print() { NumberClassInFirstProject num = new NumberClassInFirstProject(); Console.WriteLine(num.number); // Hata yok. Bu projede herhangi bir yer (assembly) sayi değişkenine erişebilir.. } } //Project 2 (ASSEMBLY) class Program { void Print() { NumberClassInFirstProject num = new NumberClassInFirstProject(); Console.WriteLine(num.number); // Hata. Koruma seviyesi nedeniyle sayı değişkenine erişilemez. //İkinci projedeki Program sınıfı, başka bir projeden dahili üyelere erişemez. } } |
