型リスト (Visual Basic)

ジェネリック プログラミング要素の型パラメーターを指定します。 複数のパラメーターはコンマで区切ります。 次に、1 つの型パラメーターの構文を示します。

構文

[genericmodifier] typename [ As constraintlist ]

指定項目

用語 定義
genericmodifier 任意。 ジェネリック インターフェイスとデリゲートのみで使用できます。 Out キーワードを使用して共変として、または In キーワードを使用して反変として、型を宣言できます。 「 共変性と反変性を参照してください。
typename 必須です。 型パラメーターの名前。 これは、対応する型引数で提供された、定義済みの型に置換されるプレースホルダーです。
constraintlist 任意。 typename に指定できるデータ型を制約する要件の一覧。 複数の制約がある場合は、それらを中かっこ ({ }) で囲み、コンマで区切ります。 As キーワードを使用して、制約リストを取り込む必要があります。 As は、リストの開始で 1 回だけ使用します。

Remarks

すべてのジェネリック プログラミング要素で、少なくとも 1 つの型パラメーターを受け取る必要があります。 型パラメーターは、クライアント コードでジェネリック型のインスタンスを作成するときに指定する特定の型 (構築された要素) のプレースホルダーです。 ジェネリック クラス、構造体、インターフェイス、プロシージャ、またはデリゲートを定義できます。

ジェネリック型を定義する場合の詳細については、「Visual Basic におけるジェネリック型」を参照してください。 型パラメーター名の詳細については、「宣言された要素の名前」を参照してください。

ルール

  • かっこ。 型パラメーター リストを指定する場合は、かっこで囲む必要があります。また、Of キーワードでリストを取り込む必要があります。 Of は、リストの開始で 1 回だけ使用します。

  • 制約。 型パラメーターへの制約の一覧には、次の項目を任意の組み合わせで含めることができます。

    • 任意の数のインターフェイス。 指定された型では、この一覧のすべてのインターフェイスを実装する必要があります。

    • 最大 1 つのクラス。 指定した型は、そのクラスから継承する必要があります。

    • New キーワード。 指定した型では、ジェネリック型でアクセスできるパラメーターなしのコンストラクターを公開する必要があります。 これは、1 つまたは複数のインターフェイスによって型パラメーターを制約する場合に便利です。 インターフェイスを実装する型では、必ずしもコンストラクターが公開されているとは限らず、コンストラクターのアクセス レベルによっては、ジェネリック型内のコードでそれにアクセスできない場合があります。

    • Class キーワードまたは Structure キーワード。 Class キーワードでは、ジェネリック型パラメーターを制約して、すべての型引数が参照型 (文字列、配列、デリゲート、またはクラスから作成されたオブジェクトなど) として渡されることを必要とします。 Structure キーワードでは、ジェネリック型パラメーターを制約して、すべての型引数が値型 (構造体、列挙型、基本データ型など) として渡されることを必要とします。 ClassStructure を同じ constraintlist に含めることはできません。

    指定した型は、constraintlist に含まれるすべての要件を満たしている必要があります。

    各型パラメーターに対する制約は、他の型パラメーターに対する制約と関係がありません。

動作

  • コンパイル時置換。 ジェネリック プログラミング要素から構築された型を作成する場合は、各型パラメーターに定義済みの型を指定します。 Visual Basic コンパイラによって、ジェネリック要素内の typename のすべての存在について、指定した型が使われます。

  • 制約なし。 型パラメーターに対して制約を指定しない場合、コードは、その型パラメーターのオブジェクト データ型でサポートされる操作とメンバーに制限されます。

例 1

次の例に、ジェネリック ディクショナリ クラスのスケルトン定義を示しています。これには、新しいエントリをディクショナリに追加するスケルトン関数も含まれます。

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

例 2

dictionary はジェネリックであるため、それを使用するコードでは、それぞれが同じ機能を持ちながらも、異なるデータ型に対して動作する、さまざまなオブジェクトを作成できます。 次の例に、String エントリと Integer キーを含む dictionary オブジェクトを作成するコード行を示しています。

Dim dictInt As New dictionary(Of String, Integer)

例 3

次の例は、前の例で生成された同等のスケルトン定義を示しています。

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

関連項目