In Visual Basic ermöglichen benutzerdefinierte Datentypen (Type in VB6 oder Structure in VB.NET) die Definition eigener zusammengesetzter Typen, die mehrere Variablen unterschiedlicher Typen enthalten. Dies ist praktisch zur Bündelung verwandter Daten.
UDTs (VB6):
Type Person Name As String Age As Integer Height As Single End Type Dim employee As Person employee.Name = "Alexei" employee.Age = 32 employee.Height = 1.85
Strukturen (VB.NET):
Structure Person Public Name As String Public Age As Integer Public Height As Single End Structure Dim employee As Person employee.Name = "Alexei"
Wann verwenden:
Im Gegensatz dazu: Klassen werden verwendet, wenn Kapselung von Logik, Vererbung, Polymorphismus oder Implementierung von Schnittstellen erforderlich sind.
Warum können Strukturen in VB.NET keinen Wert
Nothingzugewiesen bekommen?
Antwort: Nur Klassenvariablen (Objekte) können Nothing zugewiesen werden, da sie Referenzen speichern. Strukturen sind value-type; sie enthalten immer einen Satz von Werten; der Versuch, Nothing zuzuweisen, führt zu einem Kompilierungsfehler.
Dim s As Person = Nothing 'Fehler! Strukturen können nicht Nothing sein (außer Nullable(Of T))
Geschichte
In einem alten Projekt beschloss man, ein Array von primitiven Typen durch eine Struktur mit mehreren Feldern zu ersetzen, aber der neue Code wurde unerwartet langsamer. Es stellte sich heraus: Die Struktur war sehr groß und wurde häufig in Funktionen kopiert. Wenn man eine Klasse verwendet hätte, wären nur die Referenzen und nicht die gesamte Struktur kopiert worden.
Geschichte
Nach der Portierung von VB6-UDT zu VB.NET implementierte einer der Entwickler das Interface
ISerializablefür die Struktur im Remote Call nicht. Infolgedessen konnte das entfernte Objekt nicht serialisiert werden, was zu Fehlern bei der interprozessualen Kommunikation führte.
Geschichte
In einem Modul zur Arbeit mit Geometrie speicherte die Struktur Referenzen auf Arrays (mutable). Mehrere Instanzen dieser Struktur führten zu unerwarteten Effekten, da die Referenzen innerhalb der Struktur auf dieselben Datensätze verwiesen — Mutationen spiegelten sich in allen Kopien wider!