Share via


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 Objectausgewertet 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

  1. Erstellen Sie ein neues Windows-Anwendungsprojekt, und fügen Sie dem Formular ein Button Steuerelement, ein CheckBox Steuerelement und ein RadioButton Steuerelement hinzu.

  2. Rufen Sie die TestObject-Prozedur über die Schaltfläche des Formulars auf.

  3. 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
    

Siehe auch