次の方法で共有


オブジェクトの型の決定 (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 が返されます。 次の例では、パラメーター InParamObject であり、かつ 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...IsTypeName の両方を使用して、Ctrl 引数から渡されたオブジェクトの型を特定します。 TestObject プロシージャにより、3 種類のコントロールを使用して 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
    

関連項目