オブジェクトの型の決定 (Visual Basic)
汎用オブジェクト変数 (Object
として宣言する変数) では、あらゆるクラスのオブジェクトを保持できます。 Object
型の変数を使用する場合、オブジェクトのクラスによって異なるアクションを実行しなければならないことがあります。たとえば、オブジェクトによっては、特定のプロパティやメソッドがサポートされません。 Visual Basic では、TypeName
関数と TypeOf...Is
演算子という 2 つの方法によって、オブジェクト変数に格納されているオブジェクトの型を特定できます。
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 から派生し、そのメソッドを継承しています。 TypeOf...Is
演算子に Integer
を渡して、Object
かどうかを評価した場合、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
プロシージャにより、3 種類のコントロールを使用して 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
関連項目
.NET