ProgramlamaVB.NET Geliştirici, Mimar

Visual Basic'de (Structure) yapısını ve (Class) sınıflarını doğru kullanımındaki özelliklerini açıklayın. Uygulamalarında hangi kısıtlamalar vardır ve bellek yönetimi ve davranış açısından sınıflardan nasıl farklıdırlar?

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

Cevap

Visual Basic'de yapılar Structure anahtar kelimesi ile tanımlanır. Onlar:

  • Değer tipleri (value type) dir: yığında ya da başka nesnelerin içinde yer alır;
  • Diğer kullanıcı tanımlı türlerden miras alamazlar (ancak arayüzleri uygulayabilirler);
  • Yapının dışında standart bir yapılandırıcıdan başka, parametresiz bir yapılandırıcıya sahip olamazlar;
  • MustInherit (soyut) olarak ilan edilemezler ya da finalizörler içermemelidir;
  • Bellek üzerinde tasarruf sağlayan, küçük ve değişmez nesneler için iyi bir seçimdir.

Örnek

Public Structure Point Public X As Integer Public Y As Integer Public Sub New(x As Integer, y As Integer) Me.X = x Me.Y = y End Sub End Structure Dim p1 As New Point(1, 2) Dim p2 = p1 ' Değer kopyalanır, referans değil! p2.X = 5 ' p1.X = 1, p2.X = 5

Kısıtlamalar

  • Yapılar birbiriyle miras alamaz, yalnızca System.ValueType'dan miras alabilirler.
  • Sadece otomatik bir yapılandırıcı izni vardır.
  • Uygulama için yalnızca arayüzlere izin verilir.
  • Yapı referans üyeleri içeriyorsa, kopyalama ve değişikliklerle ilgili olası nüanslar nedeniyle dikkatli olunmalıdır.

Anlam Yükü Taşıyan Soru

S: Yapı bir fonksiyona ByVal ve ByRef ile geçirildiğinde ne olur? Sınıfın geçişinden farkı nedir?

C: Yapı ByVal ile geçirildiğinde, yapıların tümünün bir kopyası oluşturulur. Fonksiyondaki değişiklikler orijinal nesneyi etkilemez. ByRef ile ise, orijinal değişken değiştirilir. Sınıflar ise herhangi bir geçişte (hatta ByVal ile) referans geçirir, yapılar ByVal ile tamamen kopyalanır; bu performans ve davranışı etkiler.

Sub MutateByVal(p As Point) p.X = 100 End Sub Sub MutateByRef(ByRef p As Point) p.X = 100 End Sub Dim s As New Point(3, 4) MutateByVal(s) ' s.X hala 3 MutateByRef(s) ' s.X artık 100

Hikaye

1. Büyük bir kütüphane projesinde, yapılar, ByVal arayüzü ile büyük veri dizileri göndermek için kullanıldı. Bu, büyük yapıların yığında çoklu kopyalanmasından kaynaklanan performans kaybına neden oldu. Problemi, yapıları değişmez sınıflarla değiştirmekle çözdüler.


Hikaye

2. GIS geliştirme projesinde, referans alanlar içeren yapılar kopyalanırken karışıklık ortaya çıktı — yapının içindeki diziyi değiştirirken, geliştirici beklenmedik bir şekilde, dizinin kopyalandığı her yerde orijinalin değişeceğini beklemiyordu, “değer türü” olmasına rağmen.


Hikaye

3. Muhasebe yazılımında, iş varlıkları için yapılar ve sınıflar karıştırıldı: yapı için miras alma gerçekleştirme girişimi derleme hatası ile sonuçlandı, sistem mimarisini yeniden organize etmek zorunda kaldılar, bu da başlangıçta yapı ve sınıf seçimi gibi yanlış bir seçimden dolayı zaman alıcı oldu.