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 要素を受け取ったり返したりするので、弱い型指定と遅延バインディングの欠点が適用されます。
参照
参照
System.Collections.Specialized