private
En minik erişim düzenleyicisidir. Tipin üyelerinde kullanılır. Üyenin (bu üye metod veya global değişken –alan- olabilir), yalnızca o tipin içerisinden erişilmesine izin verir. Yani üyenin o tipe "özel" olmasını sağlar. Adı üzerinde! Başka bir değişle, private anahtar kelimesi ile tanımlanmış bir üyeye, tip dışından ulaşamazsınız. Ha unutmadan: private üyeler miras yoluyla türetilmiş sınıflara aktarılamazlar. Bir şey daha, eğer bir üyenin önüne hiçbir erişim düzenleyici anahtar kelimesi belirtmezseniz, o üye derleyici tarafından private olarak algılanır. Yani private, üyeler için varsayılan erişim düzenleyicisidir.public
En genel ve sınırsız erişim düzenleyicisidir. Hem tip için hem de, tip üyeleri için kullanılabilir. Elbette her ikisi için de farklı anlamları vardır. Önce tipler için konuşalım. Örneğin, bir sınıfın erişim düzenleyicisi public ise bu, o sınıfın, bulunduğu assembly dışından (referans olarak alındığı başka bir assembly'den) her türlü erişilebileceği anlamına gelir. Peki, tipin üyeleri public ise ne olur? Yine adı üzerinde. public, "genel" demektir. Yani, o üyeye her yerden erişilebilir.Doğal olarak kalıtım yolu ile türetilmiş sınıflara aktarılırlar.Şimdiye dek anlattığım erişim düzenleyicileri hakkında zaten az çok birşeyler duymuşsunuzdur. Sınıflarımda bu konuyu anlatırken, öğrencilerimin yüz ifadelerinin en çok değiştiği erişim düzenleyicelere geldi sıra (bu ifade değişimi genellikle şöyle yorumlanır; "ee nerede kullanacağız lan bunu?" ya da "anlamadım ki!").
protected
"Korunan" anlamına geldiği aşikar. Peki ama kim kimden korunuyor ("şşşt!! Değiştirmeyin yüz ifadenizi hemen")? Peki, sadece tipin üyelerinde (metod veya alan) kullanılabilir (aynı private gibi). Bu üyeye yalnızca ait olduğu tip içinden ulaşılabilir (aa! Bu da private gibi). E o zaman, private'den farkı nedir? İşte tek fark: protected olarak tanımlanmış alan ya da metodlar, miras olarak aktarılabiliriler. Yani, "bu üyeye kesinlikle dışardan ulaşılamasın, ama miras bırakılabilsin" diyorsanız, o üye protected olmalı.Peki ne zaman, nasıl bir modelde buna ihtiyaç duyarsınız? Şöyle hayal edelim; "personel" isminde bir sınıfınız var ve bu sınıfın da "maasHesapla" isminde bir metodu var. Metod basitçe, mesai saati ve saat ücretlerini alıp çarpıyor. Şimdi, bu sınıfın temel sınıf olmasına karar verdiniz. Muhendis ve Muhasebeci sınıflarını buradan türeteceksiniz. E onlarda da maasHesapla metodu olacak (yani kalıtım yoluyla aktarılacak – private olamaz). Ama siz, bu sınıfların dışından (yani sınıfın örneğinden) maasHesapla metoduna erişmek istemiyorsunuz (o zaman public olma şansı yok). İşte bu durumda maasHesapla metodu, protected olmalı.
Örneklerle bakalım:
Yukarıda mevzu bahis Personel isimli sınıfımı görüyorsunuz.
internal
"Dahili" anlamına gelmektedir. Yalnızca bulunduğu assembly'den erişilebilir. Burada assembly ifadesinden kasıt, projenin kendisidir. Yani, bir kütüphane (.dll) oluşturuyorsanız, internal bir sınıfa sadece o kütüphaneden ulaşabilirsiniz. Bu erişim düzenleyicisi, sınıf üyelerinde de kullanılabilir. Onda da etkisi aynıdır. Bir sınıfın erişim düzenleyicisi belirtilmezse, varsayılan olarak internal kabul edilir.protected internal
Yalnızca sınıf üyelerine uygulanır. Kelimelerin arasına "ya da" konulunca anlaşılması daha kolay olacaktır. Erişim yapılan yere göre "internal" ya da "protected" davranır. Doğal olarak assembly dışından erişilmeye çalışıldığında internal, aynı assembly'den erişilmeye çalışıldığında ise proyected davranır.Kaynak:turkayurkmez.com
Hiç yorum yok:
Yorum Gönder