Bestimmen des Objekttyps (Visual Basic)
Generische Objektvariablen (d. h. Variablen, die Sie als Object
deklarieren) können Objekte aus einer beliebigen Klasse enthalten. Bei Verwendung von Variablen vom Typ Object
müssen Sie möglicherweise unterschiedliche Aktionen basierend auf der Klasse des Objekts ausführen, z. B. einige Objekte unterstützen möglicherweise keine bestimmte Eigenschaft oder Methode. Visual Basic bietet zwei Möglichkeiten, zu bestimmen, welcher Objekttyp in einer Objektvariable gespeichert ist: die TypeName
-Funktion und der TypeOf...Is
-Operator.
TypeName und TypeOf... Ist
Die TypeName
-Funktion gibt eine Zeichenfolge zurück und ist die beste Wahl, wenn Sie den Klassennamen eines Objekts speichern oder anzeigen müssen, wie im folgenden Codefragment gezeigt:
Dim Ctrl As Control = New TextBox
MsgBox(TypeName(Ctrl))
Der TypeOf...Is
-Operator ist die beste Wahl zum Testen des Typs eines Objekts, da er viel schneller als ein äquivalenter Zeichenfolgenvergleich mit TypeName
ist. Das folgende Codefragment verwendet TypeOf...Is
innerhalb einer If...Then...Else
-Anweisung:
If TypeOf Ctrl Is Button Then
MsgBox("The control is a button.")
End If
Hier ist Vorsicht geboten. Der TypeOf...Is
-Operator gibt True
zurück, wenn ein Objekt einen bestimmten Typ aufweist oder von einem bestimmten Typ abgeleitet wird. Fast alles, was Sie mit Visual Basic tun, umfasst Objekte, die einige Elemente enthalten, die normalerweise nicht als Objekte betrachtet werden, z. B. Zeichenfolgen und ganze Zahlen. Diese Objekte werden von Methoden abgeleitet und erben von Object. Wenn ein Integer
übergeben und mit Object
ausgewertet wird, gibt der TypeOf...Is
-Operator True
zurück. Im folgenden Beispiel wird gemeldet, dass der Parameter InParam
sowohl ein Object
als auch ein Integer
ist:
Sub CheckType(ByVal InParam As Object)
' Both If statements evaluate to True when an
' Integer is passed to this procedure.
If TypeOf InParam Is Object Then
MsgBox("InParam is an Object")
End If
If TypeOf InParam Is Integer Then
MsgBox("InParam is an Integer")
End If
End Sub
Das folgende Beispiel verwendet sowohl als TypeOf...Is
auch TypeName
, um den Typ des Objekts zu bestimmen, das im Ctrl
-Argument an ihn übergeben wird. Die TestObject
-Prozedur ruft drei verschiedene Arten von Steuerelementen auf ShowType
.
So führen Sie das Beispiel aus
Erstellen Sie ein neues Windows-Anwendungsprojekt, und fügen Sie dem Formular ein Button Steuerelement, ein CheckBox Steuerelement und ein RadioButton Steuerelement hinzu.
Rufen Sie die
TestObject
-Prozedur über die Schaltfläche des Formulars auf.Fügen Sie ihrem Formular den folgenden Code hinzu:
Sub ShowType(ByVal Ctrl As Object) 'Use the TypeName function to display the class name as text. MsgBox(TypeName(Ctrl)) 'Use the TypeOf function to determine the object's type. If TypeOf Ctrl Is Button Then MsgBox("The control is a button.") ElseIf TypeOf Ctrl Is CheckBox Then MsgBox("The control is a check box.") Else MsgBox("The object is some other type of control.") End If End Sub Protected Sub TestObject() 'Test the ShowType procedure with three kinds of objects. ShowType(Me.Button1) ShowType(Me.CheckBox1) ShowType(Me.RadioButton1) End Sub