| Während die ersten beiden vorgestellten Möglichkeiten wenig praxistauglich sind und nur der Vollständigkeit halber in diesen Artikel aufgenommen wurden, beschreiben die folgenden Abschnitte Lösungswege, die sich in verschiedenen Szenarien als vorteilhaft erweisen. Die Idee hinter dieser Methode ist, den Datentyp DateTime um eine Eigenschaft zu erweitern, die anzeigt, ob das Objekt einen Nullwert enthält oder nicht. Der Datentyp DateTime ist jedoch als Strukturtyp implementiert und kann deshalb nicht durch Vererbung erweitert werden. Stattdessen wird ein neuer Datentyp NullableDateTime erstellt, der, in Anlehnung an die Implementierung des Typs DBNull, in der Eigenschaft Value den Datumswert aufnimmt und über den Wert der Eigenschaft IsNull einen Nullwert anzeigt. Je nach gewünschter Semantik kann NullableDateTime als Struktur- oder Klassentyp implementiert werden. Public Structure NullableDateTime
Private m_Value As Date
Private m_IsNull As Boolean
Public Property Value() As Date
Get
Return m_Value
End Get
Set(ByVal Value As Date)
m_Value = Value
End Set
End Property
Public Property IsNull() As Boolean
Get
Return m_IsNull
End Get
Set(ByVal Value As Boolean)
m_IsNull = Value
End Set
End Property
End Structure Listing 3: Verwendung eines eigenen Typs als Kapselung In Visual Basic .NET besitzt der Datentyp DateTime die Parallelbezeichnung Date. Dementsprechend wäre es wünschenswert, in Visual Basic .NET den oben vorgestellten Datentyp NullableDateTime mit dem Namen NullableDate ansprechen zu können, um Konsistenz in der Benennung der Datentypen zu wahren. Die Imports-Direktive der Programmiersprache Visual Basic .NET erweist sich zu diesem Zweck als nützlich, erlaubt sie es doch, Namen von Namensräumen und Klassen Parallelbezeichnungen zuzuordnen. Unter der Annahme, dass der Datentyp NullableDateTime Mitglied des Namensraums MvpsOrg.DotNet.NullableTypes ist, reicht es aus, in den jeweiligen Codedateien vor der ersten Deklaration die Zeile Imports NullableDate = MvpsOrg.DotNet.NullableTypes.NullableDateTime aufzunehmen, um NullableDate direkt im Quellcode der Datei benutzen zu können. Nachstehendes Listing gibt ein Beispiel für die Verwendung des Datentyps NullableDate. Imports NullableDate = MvpsOrg.DotNet.NullableTypes.NullableDateTime
Private m_Birthday As NullableDate
.
.
.
If m_Birthday.IsNull Then
Me.LabelBirthday.Text = "(unbekannt)"
Else
Me.LabelBirthday.Text = CStr(m_Birthday.Value)
End If Listing 4: Verwendung eines eigenen Typs als Kapselung |