Property Kavramı ve Erişim Belirleyiciler (Access Modifiers)

Hangi programlama dilini kullanırsak kullanalım programımızda yer vereceğimiz öğelere bir erişim yetkisi ve kısıtlaması eklemek bazen kaçınılmaz oluyor. Programımızdaki bu öğeler class, interface, delegate, enum, struct, metot, değişken vs. olabilir. C# dilini kullanarak kodlama yapacak olan bir yazılımcı için de bu hususta belirli erişim belirleyici anahtar kelimeler (keywords) mevcuttur. Programımızda yer alan öğelere bu erişim belirleyicileri ön ek olarak ekleyerek erişimlerini kısıtlayabiliriz. Microsoft tarafından C# dili için bize sunulan bu erişim belirleyici (access modifiers) anahtar kelimeler şunlardır:

  • public
  • private
  • protected
  • internal
  • protected internal

Yukarıda belirttiğimiz bu erişim belirleyicileri kısaca açıklamak gerekirse; “public” programdaki öğeye heryerden erişim yetkisi verir, “private” ilgili öğeye sadece tanımlandığı yerden (örneğin class içinden) erişim yetkisi verilir, “protected” ile işaretlenmiş öğeye sadece türetilmiş (inherit edilmiş) class içerisinden erişilebilir, “internal” ile belirlenen öğeye sadece ilgili assembly (uygulama) içerisinden erişilebilir ve bu öğeye uygulama dışından erişim engellenmiş olunur ve son olarak da “protected internal” 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.

Şimdi yukarıda bahsettiğimiz erişim belirleyicilerinden bazılarına küçük örnekler vererek konuyu pekiştirelim. Örneğin aynı assembly içerisinde tanımlanmış iki class içerisindeki öğelere erişimi inceleyeceğiz:

Programımız içerisinde bir adet Sample isimli class oluşturup içerisine “metin” isimli private değişken ile “erisilenMetin” isimli bir de public değişken tanımlandı. Ayrıca “urunID” isimli bir değişken daha oluşturulmuş olup dikkat edilirse herhangi bir erişim belirleyici verilmemiştir. Yukarıda belirtildiği gibi bu değişken varsayılan olarak zaten private tır. “urunID” isimli değişken için ayrıca “UrunID” isimli bir property (özellik) oluşturulmuştur. Property oluşturabilmek için kursor private tanımlı değişken isminin üzerinde odaklanmış iken ctrl+r+e tuş kombinasyonuna sırasıyla basarak property oluşturma ekranına gelinir. Burada oluşturulacak property için bir ayar yapılmayacaksa ilgili sayfalar enter ile geçilir ve private değişkenimiz için property oluşturulmuş olur. Tabi istenirse bu işlem kod yazarak programcı tarafından da yapılabilirdi. Burada dikkat edilmesi gereken nokta değişken private iken oluşturulan property public erişim belirleyicisini alır. Bunun nedeni bu değişken için değer atama ve ilgili değerini alma gibi işlemler için bir kriter uygulanmak isteniyorsa ilgili property nin get ve set bloklarında bu işlemler yapılmalıdır. “get” bloğu değişkene atanan değeri elde etmek için kullanılır ve return anahtar kelimesi ile bu değeri programa döndürür. “set” bloğu ise değişkene değer atamak için kullanılır. Property konusunu kısaca açıkladıktan sonra örneğimize dönelim. Sample sınıfında tanımladığımız değişkenler ve property e erişim için Program isimli classımızın Main adlı metodunda Sample classımızı new ile örnekliyoruz ve bu classa ait “deneme” isimli bir nesne oluşturuyoruz. Daha sonra oluşturduğumuz “deneme” isimli nesne üzerinden Sample classı öğelerine erişmeye çalışıyoruz. Ekranda görüldüğü gibi private tanımlanmış öğelere erişilemez iken sadece public tanımlı “erisilenMetin” isimli değişkenimiz ile beraber “UrunID” ismli public tanımlı Property e erişebilmekteyiz.

Son olarak property kavramına dönecek olursak onunla ilgili de küçük bir örnek ile konuyu tamamlayalım:

Burada “UrunID” isimli property için değer ataması yapılırken set blogu içerisinde tanımladığımız eğer sıfırdan küçük bir değer atanırsa atanan değerin sıfıra eşit olmasını yok eğer atanan değer sıfırdan büyük ise o zaman atanan değerin olduğu gibi atanmasını sağlıyoruz. İlk etapta “UrunID” ye -5 değeri atanmış ve sonuç ekrana yazdırılmıştır. Görüldüğü gibi -5 değeri atanmaya çalışılsa bile atanan değer negatif olduğu için sıfıra eşitlenmiştir. İkinci durumda ise bu sefer 3 gibi pozitif bir sayı ataması yapılmış ve yine ekrana yazdırılmıştır. Bu durumda 3 değerinin atandığı ekrandan görülmektedir.

Yazar: Abdullah ALTINTAŞ