次の方法で共有


オブジェクトの種類の決定 (Visual Basic)

ジェネリック オブジェクト変数 (つまり、 Objectとして宣言する変数) は、任意のクラスのオブジェクトを保持できます。 Object型の変数を使用する場合、オブジェクトのクラスに基づいて異なるアクションを実行する必要がある場合があります。たとえば、一部のオブジェクトが特定のプロパティやメソッドをサポートしていない場合があります。 Visual Basic には、オブジェクト変数に格納されるオブジェクトの種類を決定する 2 つの方法 ( TypeName 関数と TypeOf...Is 演算子) が用意されています。

TypeName と TypeOf...です

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を返します。 次の例では、パラメーター InParamObjectIntegerの両方であることを報告します。

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
    

こちらも参照ください