Empfehlung zur Aktualisierung: Verwenden früher Bindung und expliziter Konvertierungen
Aktualisiert: November 2007
Sowohl Visual Basic 6.0 als auch Visual Basic 2008 unterstützen spät gebundene Objekte. Spätes Binden ist der Vorgang, bei dem eine Variable als dem Datentyp Object zugehörig deklariert und zur Laufzeit der Instanz einer Klasse zugewiesen wird. Während des Aktualisierungsvorgangs können spät gebundene Objekte jedoch Probleme bereiten, wenn Standardeigenschaften aufgelöst werden oder das zugrunde liegende Objektmodell geändert wurde und Eigenschaften, Methoden und Ereignisse konvertiert werden müssen. Wenn Sie z. B. über ein Formular mit dem Namen Form1 und ein Label mit dem Namen Label1 verfügen, würde mit dem folgenden Code die Beschriftung des Labels auf "SomeText" festgelegt:
Dim o As Object
Set o = Me.Label1
o.Caption = "SomeText"
In Visual Basic 2008 wird die Caption-Eigenschaft eines Label-Steuerelements durch die Text-Eigenschaft ersetzt. Sobald der Code aktualisiert wird, werden alle Instanzen der Caption-Eigenschaft in Text geändert. Da jedoch spät gebundene Objekte keinen Typ aufweisen, kann von Visual Basic nicht ermittelt werden, um welchen Objekttyp es sich handelt oder ob Eigenschaften übersetzt werden sollen. In solchen Fällen muss der Code nach der Aktualisierung manuell geändert werden.
Wenn Code neu geschrieben wird und früh gebundene Objekte verwendet werden, wird der Code automatisch aktualisiert.
Dim o As Label
Set o = Me.Label1
o.Text = "SomeText"
Wenn möglich, sollten Variablen mit dem geeigneten Typ und nicht einfach als dem Object-Datentyp zugehörig deklariert werden.
Beim Einsatz von Object-Variablen und Variant-Variablen im Visual Basic 6.0-Code wird empfohlen, explizite Konvertierungen zu verwenden, wenn die Variablen zugewiesen, Operationen auf den Variablen ausgeführt oder die Variablen an eine Funktion übergeben werden. Der Zweck der "+"-Operation im folgenden Code ist unklar:
Dim Var1 As Variant
Dim Var2 As Variant
Dim Var3 As Variant
Var1 = "3"
Var2 = 4
'BAD: Should Var1 and Var2 be added as strings or integers?
Var3 = Var1 + Var2
Das vorherige Beispiel kann in Visual Basic 2008 einen Laufzeitfehler verursachen. Wenn Sie die letzte Zeile nochmals schreiben, um explizite Konvertierungen zu verwenden, wird der Code funktionieren:
'GOOD: explicit conversion
Var3 = CInt(Var1) + CInt(Var2)
Visual Basic 2008 unterstützt das Überladen von Funktionen auf Grundlage des Parametertyps. Die Environ-Funktion z. B. verfügt nun über zwei Formen:
Environ( Expression As Integer) As String
Environ( Expression As String ) As String
Von Visual Basic 2008 wird auf Grundlage des Parametertyps ermittelt, welche Funktion aufgerufen werden soll. Wenn eine ganze Zahl an Environ() übergeben wird, wird die Version für ganze Zahlen aufgerufen. Wenn eine Zeichenfolge übergeben wird, wird die Zeichenfolgenversion aufgerufen. Code, mit dem ein Variant-Datentyp oder Object-Datentyp an eine überladene Funktion übergeben wird, kann einen Fehler zur Kompilierungszeit oder einen Laufzeitfehler verursachen. Durch das Verwenden einer expliziten Konvertierung, wie im folgenden Beispiel, wird der Code nach der Aktualisierung auf Visual Basic 2008 wie vorgesehen ausgeführt:
Dim a As String
Dim v As Variant
v = "Path"
'GOOD: explicit conversion
a = Environ(CStr(v))
Das Verwenden von expliziten Konvertierungen von spät gebundenen Objekten entspricht guter Programmierpraxis. Dies erleichtert die Bestimmung des Zwecks des Codes und vereinfacht das Aktualisieren eines Projekts auf Visual Basic 2008.