Bestimmen des Objekttyps

Aktualisiert: November 2007

Generische Objektvariablen, d. h. als Object deklarierte Variablen, können Objekte aus allen Klassen enthalten. Beim Einsatz von Variablen des Typs Object ist das weitere Vorgehen u. U. von der Objektklasse abhängig. Beispielsweise ist es möglich, dass einige Objekte eine bestimmte Eigenschaft oder Methode nicht unterstützen. In Visual Basic lässt sich auf zweierlei Weise bestimmen, welcher Objekttyp in einer Objektvariablen gespeichert wird: mit der TypeName-Funktion und mit dem TypeOf...Is-Operator.

TypeName und TypeOf…Is

Die TypeName-Funktion gibt eine Zeichenfolge zurück, deren Verwendung sich beim Speichern oder Anzeigen des Klassennamens eines Objekts, wie im folgenden Codefragment gezeigt, empfiehlt:

Dim Ctrl As Control = New TextBox
MsgBox(TypeName(Ctrl))

Der TypeOf...Is-Operator ist beim Testen des Objekttyps empfehlenswert, da er viel schneller als ein entsprechender Zeichenfolgenvergleich mit TypeName ist. Im folgenden Codefragment wird TypeOf...Is in einer If...Then...Else-Anweisung verwendet:

If TypeOf Ctrl Is Button Then
    MsgBox("The control is a button.")
End If

Dabei müssen Sie allerdings folgende Besonderheiten beachten. Der TypeOf...Is-Operator gibt True zurück, wenn ein Objekt eines bestimmten Typs vorliegt oder von einem bestimmten Typ abgeleitet wurde. Beinahe jeder Vorgang in Visual Basic umfasst Objekte, wozu auch solche Elemente gehören, die normalerweise nicht als Objekte betrachtet werden, z. B. String- und Integer-Werte. Diese Objekte sind von Object abgeleitet und erben Methoden von dieser Klasse. Wenn dem TypeOf...Is-Operator ein Integer-Wert übergeben und nach Object überprüft wird, ergibt die Auswertung True. Im folgenden Beispiel wird gemeldet, dass der Parameter InParam gleichzeitig vom Typ Object und 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

Im folgenden Beispiel werden sowohl TypeOf...Is als auch TypeName benutzt, um den Typ des im Ctrl-Argument übergebenen Objekts zu ermitteln. Die TestObject-Prozedur ruft ShowType mit drei verschiedenen Steuerelementen auf.

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 im Formular auf.

  3. Fügen Sie dem 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

Konzepte

Aufrufen einer Eigenschaft oder Methode mit einem Zeichenfolgennamen

Referenz

Object-Datentyp

TypeName-Funktion (Visual Basic)

If...Then...Else-Anweisung (Visual Basic)

String-Datentyp (Visual Basic)

Integer-Datentyp (Visual Basic)

Weitere Ressourcen

Ermitteln von Klasseninformationen zur Laufzeit