ProgramlamaVB.NET Geliştirici / Kütüphane Geliştiricisi

Visual Basic'de özel (private) ve korumalı (protected) yöntemlere ve alanlara erişimin nasıl gerçekleştirileceği, kontrol edileceği ve sınırlanacağı? Aynı sınıf, türetilmiş sınıflar ve diğer derlemeler içindeki erişim özellikleri nelerdir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Sorunun Tarihçesi

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ı.

Problem

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.

Çözüm

Aşağıdaki belirleyiciler desteklenmektedir:

  • Private — yalnızca mevcut sınıf/modül içinde erişim
  • Protected — mevcut sınıf ve tüm miras alanlar içinde (başka derlemelerden bile)
  • Friend — bir derleme içinde erişim
  • Protected Friend — miras alanlar içinde veya derleme içinde erişim

Kod ö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ırlar
  • Protected, tüm miras alan sınıflarında her türlü derlemede çalışır
  • Protected Friend, her iki kuralı birleştirir

Aldatıcı Sorular.

Tü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.

Tipik Hatalar ve Antipatronlar

  • Tüm yöntemleri public veya friend olarak açma
  • protected alanların kullanılması gerektiği yerlerde private özelliklerin kullanılması
  • Aşırı geniş erişim nedeniyle kapsülleme ihlali

Gerçek Hayattan Bir Örnek

Olumsuz Durum

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:

  • Hızlı test
  • Erişim için daha az kod

Eksiler:

  • Zayıf kapsülleme
  • İç yapının değişmesiyle birlikte daha fazla hata
  • Sınıfın değiştirilmesi zorluğu

Olumlu Durum

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:

  • İç verilerin korunması
  • Müşteriler için risk olmadan uygulamanın kolayca güncellenmesi
  • Esnek mimari

Eksiler:

  • Bazen ek kod gereklidir (get/set)
  • Test için friend/internal üzerinden erişim düzenlenmesi gereklidir