型リスト (Visual Basic)
ジェネリックなプログラミング要素に型パラメーターを指定します。複数のパラメーターを指定するときは、コンマ (,) で区切ります。型パラメーターを 1 つ定義する場合の構文は次のとおりです。
[genericmodifier] typename [ As constraintlist ]
指定項目
語句 |
定義 |
genericmodifier |
省略可能です。ジェネリックなインターフェイスおよびデリゲートでのみ使用できます。Out キーワードを使用して共変の型を宣言するか、In キーワードを使用して反変の型を宣言することができます。「共変性と反変性 (C# および Visual Basic)」を参照してください。 |
typename |
必ず指定します。型パラメーターの名前です。これはプレースホルダーです。対応する型引数で指定される定義済みの型に置き換えられます。 |
constraintlist |
省略可能です。typename に指定可能なデータ型を制約する要件のリストです。制約を複数指定する場合は、中かっこ ({ }) で囲み、コンマで区切って記述します。制約リストには As キーワードを付ける必要があります。As はリストの先頭に一度だけ記述します。 |
解説
すべてのジェネリックなプログラミング要素は、型パラメーターを少なくとも 1 つ受け取る必要があります。型パラメーターは特定の型 (構成される要素) のプレースホルダーであり、クライアント コードでジェネリック型のインスタンスを作成するときに指定されます。クラス、構造体、インターフェイス、プロシージャ、またはデリゲートをジェネリックで定義できます。
ジェネリック型を定義する状況については、「Visual Basic におけるジェネリック型 (Visual Basic)」を参照してください。型パラメーターの名前については、「宣言された要素の名前 (Visual Basic)」を参照してください。
規則
**かっこ。**型パラメーターのリストを指定する場合は、リストをかっこで囲み、Of キーワードを使って特定する必要があります。Of はリストの先頭に一度だけ記述します。
**制約。**型パラメーターに対する制約のリストには、次の項目を任意の組み合わせで定義できます。
任意の数のインターフェイス。指定する型は、このリストにあるすべてのインターフェイスを実装している必要があります。
1 つ以下のクラス。指定する型は、そのクラスから継承している必要があります。
New キーワード。指定する型は、ジェネリック型からアクセス可能な、パラメーターを持たないコンストラクターを公開している必要があります。これは、型パラメーターを 1 つ以上のインターフェイスで制約している場合に使用します。インターフェイスを実装する型が、必ずしもコンストラクターを公開しているとは限りません。また、コンストラクターのアクセス レベルによっては、ジェネリック型の内部のコードからアクセスできない可能性もあります。
Class キーワードまたは Structure キーワード。Class キーワードでは、ジェネリック型パラメーターに渡すすべての型引数を必ず参照型 (文字列、配列、デリゲート、クラスから作成されたオブジェクトなど) にする制約を指定できます。Structure キーワードでは、ジェネリック型パラメーターに渡すすべての型引数を必ず値型 (構造体、列挙体、基本データ型など) にする制約を指定できます。同じ constraintlist で Class と Structure の両方を指定することはできません。
指定する型は、constraintlist に定義されたすべての要件を満たす必要があります。
型パラメーターの制約は、それぞれ他の型パラメーターの制約と関連しません。
[動作]
**コンパイル時の代入。**ジェネリックなプログラミング要素から構築型を作成する場合は、各型パラメーターに対して定義済みの型を指定します。Visual Basic コンパイラは、ジェネリックな要素の内部に出現するすべての typename に、指定された型を代入します。
**制約の省略。**型パラメーターに制約を指定しなければ、コードはその型パラメーターにおいてオブジェクト型 (Object) でサポートされた操作およびメンバーに制限されます。
使用例
ジェネリックなディクショナリ クラスのスケルトン定義の例を次に示します。スケルトン関数がディクショナリに新しいエントリを追加しています。
Public Class dictionary(Of entryType, keyType As {IComparable, IFormattable, New})
Public Sub add(ByVal et As entryType, ByVal kt As keyType)
Dim dk As keyType
If kt.CompareTo(dk) = 0 Then
End If
End Sub
End Class
dictionary がジェネリックなので、コードはそこからさまざまなオブジェクトを作成できます。各オブジェクトは同じ関数を含みますが、さまざまなデータ型に対して処理を実行します。文字列 (String) のエントリと整数 (Integer) のキーを使って dictionary オブジェクトを作成するコード行の例を次に示します。
Dim dictInt As New dictionary(Of String, Integer)
先の例と同等のスケルトン定義の例は、次のとおりです。
Public Class dictionary
Public Sub add(ByVal et As String, ByVal kt As Integer)
Dim dk As Integer
If kt.CompareTo(dk) = 0 Then
End If
End Sub
End Class
参照
処理手順
方法: ジェネリック クラスを使用する (Visual Basic)
関連項目
Function ステートメント (Visual Basic)
Out (ジェネリック修飾子) (Visual Basic)