确定对象类型 (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
同时为 Object
和 Integer
:
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...Is
和 TypeName
来确定在 Ctrl
参数中传递给它的对象类型。 TestObject
过程使用三种不同类型的控件来调用 ShowType
。
运行示例
创建一个新的 Windows 应用程序项目,并向窗体添加一个Button控件、一个CheckBox控件和一个RadioButton控件。
通过窗体上的按钮调用
TestObject
过程。将以下代码添加到窗体中:
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