4.7 Benutzerdefinierte Datentypen
Benutzerdefinierte Datentypen werden auch Strukturen genannt. In Strukturen werden Variablen unterschiedlichen Datentyps zusammengefasst, die sachlich zusammengehören. Der Entwurf eines benutzerdefinierten Datentyps geschieht im Deklarationsteil eines Moduls, der Gültigkeitsbereich kann mit Private oder Public geregelt werden.
Strukturen können in Visual Basic .NET allerdings noch wesentlich mehr. Sie ähneln eher einer Klasse. Klassen werden in Kapitel 5, »Objektorientierte Programmierung«, noch ausführlich vorgestellt. Möchten Sie zunächst aber nur Daten unterschiedlichen Typs zu einer logischen Einheit zusammenfassen, so reichen die hier vorgestellten Möglichkeiten aus.
Im folgenden Beispiel im Projekt Strukturen wird eine Struktur klassenweit gültig definiert. Innerhalb einer Prozedur werden zwei Variablen dieses benutzerdefinierten Datentyps deklariert. Den Komponenten (also Bestandteilen) einer Variablen dieses Typs werden Werte zugewiesen, anschließend wird der gesamte Datensatz in eine andere Variable des gleichen Typs kopiert. Diese Variable wird ausgegeben, siehe Abbildung 4.30.
Abbildung 4.30 Strukturen
Der zugehörige Code:
Public Class Form1
Structure Person
Dim Nachname As String
Dim Vorname As String
Dim Kind() As String
Dim PLZ As Integer
Dim Ort As String
Dim GebDatum As Date
Dim Gehalt As Single
End Structure
Private Sub cmdAnzeigen_Click(...) Handles ...
Dim PA As Person
Dim PB As Person
Dim i As Integer
' Zuweisung zu PA
PA.Nachname = "Hansen"
PA.Vorname = "Bernd"
ReDim PA.Kind(3)
PA.Kind(0) = "Svenja"
PA.Kind(1) = "Torsten"
PA.Kind(2) = "Gerd"
PA.PLZ = 74388
PA.Ort = "Bergstadt"
PA.GebDatum = "15.05.1975"
PA.Gehalt = 3522.55
' Zuweisung zu PB
PB = PA
' Ausgabe
lblAnzeige.Text = PB.Vorname & " " &
PB.Nachname & vbCrLf & "Kinder: "
For i = 0 To PB.Kind.GetUpperBound(0)
lblAnzeige.Text &= PB.Kind(i) & " "
Next
lblAnzeige.Text &= vbCrLf & PB.PLZ & " " &
PB.Ort & vbCrLf & "geb. " & PB.GebDatum &
vbCrLf & "Gehalt: " & PB.Gehalt & " €"
End Sub
End Class
Listing 4.22 Projekt »Strukturen«
Zur Erläuterung:
- Innerhalb von Structure ... End Structure wird der Aufbau des benutzerdefinierten Datentyps festgelegt. Eine Strukturdefinition muss immer klassenweit gültig vorgenommen werden. Im vorliegenden Beispiel handelt es sich um die Definition für einen Datensatz für Personendaten.
- Ein solcher Datensatz besteht aus sieben Elementen. Diese haben unterschiedliche Datentypen (Integer, String, Date, Single). Eines der Elemente ist ein Datenfeld. Bei der Definition eines Datenfelds innerhalb einer Struktur darf die Größe noch nicht festgelegt werden. Dies kann erst bei der Deklaration einer Variablen dieses Datentyps erfolgen.
- In der Prozedur cmdAnzeigen_Click() werden zwei Variablen (PA und PB) des benutzerdefinierten Datentyps deklariert. Diese Deklaration wird analog zur Deklaration einer Variablen eines Basis-Datentyps vorgenommen.
- Hinweis: Sie können auch Felder von Variablen eines benutzerdefinierten Datentyps deklarieren.
- Den Komponenten der ersten Variablen werden Werte zugewiesen. Dabei werden die Komponenten in der Form Variablenname.Komponentenname angesprochen, damit klar ist, welcher Variablen ein Vorname, ein Nachname usw. zugewiesen wird.
- Der Eigenschaft eines Steuerelements wird mit der gleichen Schreibweise ein Wert zugewiesen. Tatsächlich handelt es sich auch aus der objektorientierten Sicht um nichts anderes: Objekt.Eigenschaft = Wert. Steuerelemente oder Variablen eines benutzerdefinierten Datentyps sind Objekte, die gemäß einer (Klassen-)Definition erstellt wurden.
- Eine Besonderheit: Bei der Komponente Kind handelt es sich um ein Feld, dessen Größe noch nicht festgelegt wurde. Vor der Zuweisung einzelner Feldelemente muss die Größe allerdings gewählt werden, mithilfe von ReDim. Natürlich kann auch ein solches Feld noch seine Größe zu einem späteren Zeitpunkt der Laufzeit verändern (siehe Abschnitt 4.5.6).
- Die Zuweisung PB = PA sorgt dafür, dass der gesamte Datensatz PA mit allen Komponenten in PB kopiert wird.
- Zu guter Letzt werden alle Komponenten von PB ausgegeben.
- Bei der Komponente Kind werden die einzelnen Feldelemente mithilfe einer Schleife ausgegeben. Dabei kommt die Methode GetUpperBound() zur Ermittlung des höchsten Feld-Index zum Einsatz.
Als übersichtliche Alternative hätte sich auch die Benutzung von With angeboten (siehe Abschnitt 2.6.3). Die Komponenten der ersten Variablen hätten dann wie folgt ihre Werte erhalten:
ReDim PA.Kind(3)
With PA
.Nachname = "Hansen"
.Vorname = "Bernd"
.Kind(0) = "Svenja"
.Kind(1) = "Torsten"
.Kind(2) = "Gerd"
.PLZ = 74388
.Ort = "Bergstadt"
.GebDatum = "15.05.1975"
.Gehalt = 3522.55
End With
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.