Kapsülleme, nesne yönelimli programlamanın temel taşlarından biridir ve Private ve Protected gibi erişim belirleyicileri aracılığıyla sağlanır. Klasik Visual Basic sürümlerinde yalnızca en basit görünürlük seviyeleri destekleniyordu, ancak VB.NET'e geçişle birlikte C# ile benzer modern mekanizmalar ortaya çıktı.
Ana görev, iç tasarım detaylarını dış koddan, programın diğer parçalarından izole etmektir. Tipik hatalar, yanlış erişim seviyeleriyle, izin verilen görünürlük alanının dışında alanlara ve yöntemlere erişim girişimleriyle veya Protected davranışının diğer belirleyicilerle olan kombinasyonlarının yanlış anlaşılmasıyla ilgilidir.
Aşağıdaki belirleyiciler desteklenmektedir:
Private — yalnızca mevcut sınıf/modül içinde erişimProtected — mevcut sınıf ve tüm miras alanlar içinde (başka derlemelerden bile)Friend — bir derleme içinde erişimProtected Friend — miras alanlar içinde veya derleme içinde erişimKod örneği:
Public Class BaseClass Private Sub PrivateMethod() Console.WriteLine("PrivateMethod") End Sub Protected Sub ProtectedMethod() Console.WriteLine("ProtectedMethod") End Sub Friend Sub FriendMethod() Console.WriteLine("FriendMethod") End Sub Protected Friend Sub ProtectedFriendMethod() Console.WriteLine("ProtectedFriendMethod") End Sub End Class Public Class DerivedClass Inherits BaseClass Public Sub AccessMethods() 'PrivateMethod() 'Derleme hatası ProtectedMethod() 'Tamam FriendMethod() 'Tamam, eğer aynı derlemedeyse ProtectedFriendMethod() 'Tamam End Sub End Class
Anahtar özellikler:
Private ön eki, görünürlük alanını sınıfın sınırlarıyla sınırlarProtected, tüm miras alan sınıflarında her türlü derlemede çalışırProtected Friend, her iki kuralı birleştirirTüretilmiş bir sınıftan private bir alana erişmek mümkün mü?
Hayır, private üyeler her zaman yalnızca tanımlandıkları sınıfta erişilebilir. Türetilmiş sınıf, private üyelere refleksiyon yoluyla bile erişemez (standart olmayan yollar kullanılmadıkça).
Protected ile Protected Friend arasındaki fark nedir?
Protected — yalnızca sınıftan ve onun alt sınıflarından erişilebilir, başka derlemelerde bile; Protected Friend — ya türetilmiş sınıflardan ya da aynı derleme içindeki herhangi bir koddan erişilebilir.
Bir temel sınıfın örneği üzerinden korumalı bir yönteme erişebilir miyim?
Hayır, korumalı yöntem miras alanında kamuya açık olsa bile, dış koddan bir temel sınıfın örneği üzerinden çağrılması mümkün değildir. Koruma altındaki yöntemler yalnızca o sınıfın veya miras alanın vücutlarında erişilebilir.
Geliştirici, test etmeyi kolaylaştırmak için iç alanları public yapar; böylece dış kod veya birim testlerinden doğrudan onlara erişebilir. Zamanla, diğer çağrılar bu alanları kullanmaya başlar, iç yapısına güvenerek.
Artılar:
Eksiler:
Erişim belirleyicileri net bir şekilde uygulanır, tüm alanlar varsayılan olarak private olup, dış erişim yalnızca özellikler ve kamuya açık yöntemler aracılığıyla sağlanır. Test ihtiyaçları için arayüzler veya aynı derlemedeki arkadaş sınıfları kullanılır.
Artılar:
Eksiler: