Visual Basic'te kullanıcı tanımlı türler (Type VB6'da veya Structure VB.NET'te) birkaç farklı türden değişken içeren kendi bileşik türlerinizi tanımlamanıza olanak tanır. Bu, ilişkili verileri paketlemek için kullanışlıdır.
UDT'ler (VB6):
Type Person Name As String Age As Integer Height As Single End Type Dim employee As Person employee.Name = "Alexey" employee.Age = 32 employee.Height = 1.85
Structures (VB.NET):
Structure Person Public Name As String Public Age As Integer Public Height As Single End Structure Dim employee As Person employee.Name = "Alexey"
Ne zaman kullanılmalı:
Aksine: Sınıflar, mantığın kapsüllenmesi, miras alma, çok biçimlilik veya arayüzlerin uygulanması gerektiğinde kullanılır.
VB.NET'teki yapılara neden
Nothingdeğeri atanamaz?
Cevap: Nothing yalnızca sınıf değişkenlerine (nesnelerine) atanabilir, çünkü onlar referansları saklar. Yapılar değere dayalı türlerdir; her zaman bir değer seti içerirler; Nothing değerinin atanması derleme hatasına yol açar.
Dim s As Person = Nothing 'Hata! Yapılar Nothing olamaz (Nullable(Of T) hariç)
Hikaye
Eski bir projede, birçok alanı olan bir yapı ile basit bir dizi değiştirilmek istendi, ancak yeni kod beklenmedik bir şekilde daha yavaş çalıştı. Anlaşıldı ki, yapı çok büyük boyutlardaydı ve sıklıkla fonksiyonlara kopyalanıyordu. Sınıf kullanılsaydı, yalnızca referanslar kopyalanırdı, yapının tamamı değil.
Hikaye
VB6-UDT'nin VB.NET'e taşınmasından sonra, geliştiricilerden biri uzaktan çağrıda yapının
ISerializablearayüzünü uygulamayı unuttu. Sonuç olarak, silinen nesne seri hale getirilemedi ve süreçler arası etkileşimde hatalara yol açtı.
Hikaye
Geometri ile ilgili bir modülde yapı, dizilere (değişken) referanslar içeriyordu. Bu yapının çoklu örnekleri, içindeki referansların aynı veri dizilerine işaret etmesi nedeniyle beklenmedik etkilere neden oldu — mutasyonlar tüm kopyalarda yansıyordu!