次の方法で共有


方法: タイプ セーフなコレクションの定義 (Visual Basic)

Visual Basic に用意されている Collection クラスを使用して、次の例に示すようにコレクションを定義および作成できます。

Public Class widgetRepository
    Public widgetColl As New Microsoft.VisualBasic.Collection()
    ' Insert code to implement additional functionality.
End Class

ただし、この widgetColl コレクションは厳密に型指定されません。 widget オブジェクトに限らず、どのような型の要素でもこのコレクションに追加できます。 要素を取得するときには、取得した要素を widget に変換する必要があります。 このことは、タイプ セーフの問題につながる可能性があります。 たとえば、次のコードを使用して String 型の変数をコレクションに追加するとします。

Dim notWidget As String = "This is not a widget object!"
widgetColl.Add(notWidget)

これを実行すると、コレクションの要素が widget 型ではないため、後続のコードで要素を取得しようとすると実行時に ArgumentException 例外がスローされます。

タイプ セーフの問題からの保護

ジェネリック クラスを定義することにより、タイプ セーフを最大限にすることをお勧めします。 厳密な型指定が強制されると同時に、操作する特定のデータ型に柔軟性を与えることができます。 詳細については、「Visual Basic におけるジェネリック型 (Visual Basic)」を参照してください。

クラス内にタイプ セーフなコレクションを定義するには

  • System.Collections.Generic 名前空間内のジェネリック クラスの 1 つ、たとえば List<T> をコレクション クラスの代わりに使用します。 これで、widget メンバーのみに制限されるコレクションを作成できます。 次のコード例は、前記の例の宣言を変更してジェネリック コレクションを作成する方法を示します。

    Public widgetColl As New System.Collections.Generic.List(Of widget)
    

    このようにすると厳密な型指定が強制されるため、widget アイテムだけをコレクションに追加できるようになり、Item プロパティを使って取得される要素は常に widget オブジェクトです。 また、厳密な型指定があるので、取得元のコードでは、widget から公開されるすべてのプロパティとメソッドを使用できます。

    または

  • 定義済みのクラスを使わずに、独自のコレクション クラスを作成します。 Add メソッドが widget オブジェクトだけを受け付けるように制限し、戻り値の型を widget として Item プロパティを実装します。 詳細については、「方法: タイプ セーフなコレクションの定義 (Visual Basic)」を参照してください。

    もし Item が Object 型の要素を返すように実装したとすると、明示的にアクセスできるのは Object クラスに定義されたプロパティとメソッドだけになります。 widget メンバーにアクセスするには、Option Strict Off に設定するか、次のコードに示すように CType 関数 (Visual Basic) を使って、返された要素を明示的に widget に変換します。

    Dim nextWidget As widget
    Try
        nextWidget = CType(widgetColl.Item(1), widget)
    Catch ex As Exception
        ' Insert code to run if the collection item is not a widget.
    End Try
    

    いずれの場合も、Object 要素をこのように使用すると、Visual Basic で遅延バインディングが行われ、パフォーマンスが低下します。

    Visual Basic の Collection クラスは、Object 要素を受け取ったり返したりするので、弱い型指定と遅延バインディングの欠点が適用されます。

参照

参照

Collection

System.Collections

System.Collections.Generic

System.Collections.Specialized

Option Strict ステートメント

概念

Visual Basic におけるコレクション

Visual Basic におけるジェネリック型 (Visual Basic)