确定对象类型 (Visual Basic)

泛型对象变量(即声明为 Object 的变量)可以保存任何类中的对象。 使用 Object 类型的变量时,可能需要根据对象的类执行不同的操作;例如,某些对象可能不支持特定的属性或方法。 Visual Basic 提供了以下两种方法用于确定存储在对象变量中的对象类型:TypeName 函数和 TypeOf...Is 运算符。

TypeName 和 TypeOf…Is

当需要存储或显示对象的类名时,TypeName 函数将返回字符串,这是最佳选择,如以下代码片段所示:

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

TypeOf...Is 运算符是测试对象类型的最佳选择,因为它比使用 TypeName 的等效字符串比较快得多。 以下代码片段在 If...Then...Else 语句内使用 TypeOf...Is

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

此处需要提醒一下。 如果对象属于特定类型或派生自特定类型,TypeOf...Is 运算符将返回 True。 几乎使用 Visual Basic 执行的每一个操作都涉及到对象,包括通常不视为对象的某些元素,例如字符串和整数。 这些对象派生自 Object,并且从中继承方法。 如果传递了 Integer 并且使用 Object 进行计算,TypeOf...Is 运算符将返回 True。 下面的示例报告参数 InParam 同时为 ObjectInteger

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

下面的示例使用 TypeOf...IsTypeName 来确定在 Ctrl 参数中传递给它的对象类型。 TestObject 过程使用三种不同类型的控件来调用 ShowType

运行示例

  1. 创建一个新的 Windows 应用程序项目,并向窗体添加一个Button控件、一个CheckBox控件和一个RadioButton控件。

  2. 通过窗体上的按钮调用 TestObject 过程。

  3. 将以下代码添加到窗体中:

    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
    

另请参阅