17 Nisan 2012 Salı

C# 'da OOP-3 Accsess Modifiers (Erişim Belirleyicileri)

Merhaba arkadaşlar..
.NET Framework'de Accsess Modifiers (erişim belirleyicileri) konusunu elimden geldiğince sizlere açıklamaya çalışacağım. Bir adet "Kisi" sınıfım olsun ve bu sınıfımda değişken tanımlayalım.
      public class Kisi
    {
        string ad;
        string soyad;
        int yas = 0;
        bool cinsiyet;
    }
Tanımladık arkadaşlar. Bu kişi sınıfıma formun Load metodunda uılaşmaya çalışayım.
O da ne arkadaşlar değişkenlerimi göremiyorum. Görememem çok normal. Çünkü "bir sınıf içerisinde tanımlanan değişkenlerin varsayılan(default) erişim belirleyicisi(AccsessModifier) private 'dır ". Private özel, mahrem anlamlarına gelir. Sadece içinde tanımlandığı sınıfın içerisinde görünebilirler. Bu sınıf dışından erişilemezler. "Accsess Modifier" adında yeni bir kavramla karşılaştık arkadaşlar. Türkçesi erişim belirleyicilerdir. Accsess Modifiers 'lar, bir sınıfa ya da o sınıfın üyelerine nerelerden erişip erişemeyeceğimi belirleyen keyword(anahtar kelime) 'lerdir. Sınıflara ve sınıf nesnelerine erişimin güvenlikli olması açısından böyle bir gereksinim duyulmuştur. .NET Framework 'de tanımlı 5 tane erişim belirletiyici vardır. 

Bunlar en genelden en özele doğru sıralanmış haliyle inceleyelim:
1- Public: Genel, halka açık anlamına gelir. Public, tanımlanan bir sınıf ya da sınıf üyesine her yerden - kalıtım almama gerek olmaksızın- sınırsız erişebilirim. (Daha sonra kalıtım konusunu detaylı bir şekilde inceleyeceğiz.) Farklı projelerden de erişebilirim. Fakat eğer farklı projelerden erişmek istiyorsam, öncesinde erişmek istediğim sınıfın "çıktısını", hangi projemde kullanacaksam o projeme reference olarak eklemeliyim. Bunu da "references" sekmesine sağ tık "Add Reference" deyip, dosya yolunu göstererek refere edebilirim.



NOT: Arkadaşlar yukarıda "projenin çıktısı" diye bir kavram kullandık. Projenin çıktılarına "Assembly" denir. .NET Framework 'de projeler 3 çeşit çıktı üretirler. 
- .dll, "class library" projeleri
- .exe setup, "Setup" projeleri
- .exe, diğer tüm projeler üretir.
Ve bunlar proje derlendikten sonra projenin bulunduğu dosyanın içerisindeki "bin" dosyası içerisinde yer alırlar.  Projeye sağ tık "Open Folder in Winsows Explerer" diyerek projenin bulunduğu klasöre gidebiliriz.


Yukarıda bahsettiğimiz public tanımlanan bir üyeye ulaşabilmek için refere edilen çıktı ".dll" çıktılarıdır arkadaşlar. Diğer çıktılar refere edilmek için tasarlanmamıştır.

2- Internal: Dahili anlamına gelir. Internal tanımlanan bir sınıf ya da sınıf üyesine, aynı proje içerisinden istediğim şekilde ulaşabilirim. Peki aynı projeden derken, aynı "namespace" altından mı? Hayır arkadaşlar, "proje" kavramı farklıdır, "namespace" kavramı farklı. Bir projede birden fazla "namespace" tanımlanabilir. Aynı projede birden fazla namespace bulunsun bulunmasın, "Internal" tanımlanan sınıflara ve üyelere aynı proje içerisinden istenildiği gibi ulaşılabilir. Çünkü bir proje derelendiğinde bir adet "Assmebly" üretir. "Assembly" kavramı yukarıda çıktı olarak tanımlamıştık. Bir proje bir assembly demektir. "Internal" tanımlanan sınıflara ve üyelere - aynı "namespace" de bulunsun bulunmasın bir önemi yok- aynı "assembly" içerisinden erişilebilir. 

3- Protected Internal: Adından da anlaşılacağı üzere "Protected" ve "Internal" erişim belirleyicilerinin ikisininden birinin özelliğini gösterebilmesidir. Protected Internal tanımlanan sınıf üyeleri hem "internal" gibi aynı assably içerisinden erişilebilir. Hem de -aynı "assembly" içerisinde olsun olmasın aşağıda açıklayacağımız "protected" gibi- tanımlandığı sınıfı miras alan diğer sınıflardan da erişilebilir.

4- Protected: Yukarıda da belirttiğim gibi "protected" tanımlanan bir sınıf üyesine, sadece tanımlandığı sınıfı miras alan (kalıtım yolu ile alan) diğer sınıflar içerisinde erişilebilir.
Yukarıdaki ilk verdiğim örnekte değişkenlerimi "protected" tanımlayalım. Kisi sınıfımı miras alan (:Kisi) "Ogrenci" sınıfı bu öğelere erişebilir.









5- Private: Accsess Modifier konusuna giriş yaparken de bahsettiğim gibi "private" en kısıtlı erişim sağlayan erişim belirleyicisidir. Sadece tanımlandığı sınıf içerisinden erişilebilir. Başka sınıflar bu sınıfı, ister refere etsin isterse miras alsın bu durum değişmez.

NOT: Class 'lar sadece Public ya da Internal tanımlanabilir. Erişim belirleyicisi hiç belirtilmemiş bir classın varsayılan erişim belirleyicisi Internal 'dır.
Class üyelerinin (değişkenler ve metodlar) ise yukarıda belirttiğimiz gibi Private 'dır. Fakat class üyelerinin classlardan farklı olarak, erişim belirleyicilerinden her hangi biriyle tanımlanabilirler.

Başka bir yazıda görüşmek dileğiyle, hoşçakalın...

Hiç yorum yok:

Yorum Gönder