ジェネリック

ジェネリックとは?

ジェネリックとは、簡単にいうと、特定の型(クラス)に依存しないコレクション、クラス、メソッドを記述するための仕組みです。

.NET Framework 2.0のクラス・ライブラリには、このジェネリックの機能を使用して実装されたコレクションが多数追加されています。

このため、それらの新しいコレクションを利用すれば、以前の1.xのころに比べて、プログラムをすっきりと効率的に記述できるようになっています。

ポイント:ジェネリックが使えるのは2.0から

ArrayList → Listジェネリック・クラス
Hashtable → Dictionaryジェネリック・クラス

ジェネリッククラス

ジェネリッククラスはクラス名の後ろに(Of T)が付きます。

インスタンス化の際に具体的な型を指定します→これを「型パラメータ」と呼びます。

Dim s As New List(Of String)

Dim i As New List(Of Integer)

非ジェネリッククラスとジェネリッククラスの違い

非ジェネリッククラスであるArrayListはどのような型でも受け付ける一方、取り出し時にキャストが必要となります。

一方、ジェネリッククラスであるList(Of T)はインスタンス時に型を指定するため、内容物の型が保証されるので取り出し時のキャストは不要です。

一般的に、ジェネリッククラスを使うほうがキャストのオーバーヘッドが減り、高速に処理が出来ます。

型パラメータの制約

インスタンス化の際に型パラメータに何らかの制限をしたいケースがあります。

例えば、あるメソッドを実装しているクラスに限定する等です。

その場合は「As」句を使用します。これを「制約」と呼びます。

以下のように、制約を複数組み合わせることも可能です。

Class GenericClass(Of T As {Class, New, IDisposable})

 

クラス以外にもジェネリック対応のものがあります

  • ジェネリック構造体
  • ジェネリックインタフェース
  • ジェネリックメソッド