Donnerstag, 28. November 2013

TM-SmartString: Value

Mit diesem Beitrag geht es los. Das erste Klassenmodul für einen eigenen, intelligenten Datentyp wird erstellt: TM-SmartString.
Gleichzeitig wird die erste Eigenschaft für diesen Datentyp erstellt.

Eigenschaft: Value
Diese Eigenschaft dient dazu, den Wert bzw. den Inhalt des selbst erstellten Datentyps zu speichern und abzurufen.

Implementierung
Die Implementierung erfolgt mit folgendem Code:
1:  Private m_String As String  
2:    
3:  Public Property Let Value(ByVal Text As String)  
4:    m_String = Text  
5:  End Property  
6:    
7:  Public Property Get Value() As String  
8:    Value = m_String  
9:  End Property  
In der ersten Zeile wird eine modul-private Variable vom Typ String deklariert. In dieser Variable wird der Wert bzw. Inhalt unseres neuen Datentyps gespeichert.
Die nachfolgenden Prozeduren vom Typ Property Let und Get sorgen dafür, das dieser Variable ein Wert zugewiesen werden kann bzw. dass dieser wieder abgerufen werden kann.

Bisheriger Code
Bisher wurde ein String auf die folgende Weise deklariert und verwendet:
1:  Dim myString As String  
2:  myString = "Hello World!"  
3:  MsgBox myString  
In der ersten Zeile wird die Variable deklariert. In der zweiten wird ihr ein Wert zugewiesen. Dieser wird in der dritten Zeile wieder abgerufen.

Künftiger Code
Bei Verwendung der Klasse TM_SmartString sieht der Code wie folgt aus:
1:  Dim myString As TM_SmartString  
2:  Set myString = New TM_SmartString  
3:  myString.Value = "Hello World!"  
4:  MsgBox myString.Value  
In der ersten Zeile wird die Variable deklariert. In der zweiten wird eine neue Instanz der Klasse erstellt. In der dritten Zeile wird ihr ein Wert zugewiesen. Dieser wird in der vierten Zeile wieder abgerufen.

Kritik an der bisherigen Implementierung
Die bisherige Implementierung macht die Nutzung etwas sperrig. So muss für eine einfache Wertzuweisung die Methode Value verwendet werden. Ziel muss es sein, auf die Angabe dieser Property zu verzichten.

In Visual Basic gibt es die Möglichkeit für eine Klasse eine Standardmethode bzw. -eigenschaft festzulegen. Um dies mit VBA zu realisieren muss man einen kleinen Trick anwenden. Die notwenigen Informationen werden in den VBA-Code geschrieben, danach wird das Modul exportiert und wieder importiert. Nach dem Import ist die zusätzliche Zeile nicht mehr sichtbar. Dafür ist die entsprechende Methode jetzt die Standardmethode. Diese wird immer dann verwendet, wenn die Klasse ohne Angabe einer Property oder Methode aufgerufen wird.

Ergänzte Implementierung
Im nachfolgenden Code habe ich die entsprechenden Zeilen als Kommentar eingefügt.
1:  Public Property Let Value(ByVal Text As String)  
2:  '  Attribute Value.VB_UserMemId = 0  
3:    m_String = Text  
4:  End Property  
5:    
6:  Public Property Get Value() As String  
7:  '  Attribute Value.VB_UserMemId = 0  
8:    Value = m_String  
9:  End Property  

Der neue künftige Code
Jetzt sieht der Code bei Verwendung der Klasse TM_SmartString wie folgt aus:
1:  Dim myString As TM_SmartString  
2:  Set myString = New TM_SmartString  
3:  myString = "Hello World!"  
4:  MsgBox myString  

Die ersten Schritte sind gemacht. Das Klassenmodul ist angelegt und mit der Basisfunktionalität ausgestattet. Jetzt geht es daran, das Klassenmodul Stück für Stück zu erweitern.

Die neue Version 1.01.04 steht (wie immer) auf meiner Webseite zum Download bereit.

Keine Kommentare: