Visual Basic'de "korumalı" (Protected) erişim seviyesi kapsülleme için tasarlanmıştır — bu, sınıfın üyelerinin yalnızca kendisinde ve türevlerinde erişilebilir olmasını sağlar. Bu, OOP mimarisinin düzenlenmesi ve nesnenin içsel implementasyonuna doğrudan erişimi sınırlamak için önemlidir.
Tarihsel olarak klasik VB6'da bu tür bir esneklik neredeyse yoktu, ancak VB.NET ile modern OOP standartlarına uygun tam erişim belirteçleri eklenmiştir.
Erişim düzenlemedeki bir hata, sınıfın özelliklerinin veya yöntemlerinin yanlış kullanımına ve potansiyel olarak kapsülleme ihlaline yol açabilir. Örneğin, herkese açık bir yöntem (Public) dış bileşenler de dahil herkes tarafından erişilebilirken, korumalı olan daha sınırlıdır ve türevleriyle sınırlandırılmıştır.
VB.NET'de Protected, Protected Friend ve Private erişim belirteçleri mevcuttur. Protected yalnızca sınıf içinde ve miras alanları içinde görünür, Protected Friend — yapı içinde (assembly) ve miras alanlarda, Private — yalnızca bildiren sınıfın içinde.
Kod örneği:
Public Class Animal Protected Sub Eat() Console.WriteLine("Yemek yiyor...") End Sub Private Sub Sleep() Console.WriteLine("Uyuyor...") End Sub End Class Public Class Dog Inherits Animal Public Sub PerformEat() Eat() ' Erişim: Protected End Sub ' Sleep() erişilemez: Private End Class
Anahtar özellikler:
Protected belirteci, bir sınıfın üyesinin yapının içindeki tüm sınıflar için görünmesini sağlayabilir mi?
Hayır, yalnızca sınıf ve onun miras alanları için. Protected Friend — sınıfın, miras alanlarının ve yapı içindeki tüm sınıflar için.
Bir özelliğin yalnızca miras alanları için görünür olduğunu ancak yapı dışındaki sınıflar için görünmediğini açıkça belirtebilir miyim?
Hayır, böyle bir seviye yok. Protected Friend aynı anda miras alanlar ve yapı arasında görünürlüğü paylaşır, ancak bu alanları ayıramazsınız.
Eğer bir temel sınıfta bir yöntem Protected olarak tanımlanmışsa, onu bir alt sınıfta Public olarak yeniden tanımlama mümkün müdür?
Hayır, erişim seviyesini yalnızca sıkı bir şekilde koruyabilir veya aşağıya doğru genişletebilirsiniz; daraltamazsınız; erişimi genişletmek, kapsülleme ilkelerini ihlal eder. .NET derleyicisi, erişimi daraltmaya çalıştığınızda hata verir.
Yeni başlayan bir geliştirici, iş mantığının iç yöntemlerini Public olarak ilan etti. Program güncellenirken, dış bileşenler tarafından bu yöntemlere kontrolsüz erişim nedeniyle birçok hata ortaya çıktı.
Artıları:
Eksileri:
Tecrübeli bir programcı, Protected ve Private kullanarak, ebeveyn ve alt sınıflar arasında sorumluluk alanlarını ayırır. Bu sayede güncellemeler dış API'leri etkilemez, hata sayısı azaltılır.
Artıları:
Eksileri: