型リスト (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 に定義されたすべての要件を満たす必要があります。

    型パラメーターの制約は、それぞれ他の型パラメーターの制約と関連しません。

Behavior

  • コンパイル時の代入。 ジェネリックなプログラミング要素から構築型を作成する場合は、各型パラメーターに対して定義済みの型を指定します。 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)

参照

Of 句 (Visual Basic)

New 演算子 (Visual Basic)

オブジェクト型 (Object)

Function ステートメント (Visual Basic)

Structure ステートメント

Sub ステートメント (Visual Basic)

In (ジェネリック修飾子) (Visual Basic)

Out (ジェネリック修飾子) (Visual Basic)

概念

Visual Basic でのアクセス レベル

その他の技術情報

共変性と反変性 (C# および Visual Basic)