Share via


オブジェクトの型の決定

更新 : 2007 年 11 月

汎用オブジェクト変数 (Object として宣言する変数) は、あらゆるクラスのオブジェクトを保持できます。Object 型の変数を使用するとき、オブジェクトのクラスに基づいて異なるアクションを行う必要があります。たとえば、特定のプロパティまたはメソッドをサポートしないオブジェクトもあります。Visual Basic には、どの型のオブジェクトがオブジェクト変数に格納されるのかを決める、2 つの方法が用意されています。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 演算子を使用する場合には注意が必要です。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 プロシージャは、3 種類のコントロールで ShowType を呼び出します。

例を実行するには

  1. 新しい Windows アプリケーション プロジェクトを作成し、ButtonCheckBox、および 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
    

参照

概念

文字列名によるプロパティまたはメソッドの呼び出し

参照

オブジェクト型 (Object)

TypeName 関数 (Visual Basic)

If...Then...Else ステートメント (Visual Basic)

文字列型 (String) (Visual Basic)

整数型 (Integer) (Visual Basic)

その他の技術情報

実行時のクラス情報の取得