次の方法で共有


型リスト (Visual Basic)

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

構文

[genericmodifier] typename [ As constraintlist ]

部品

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

注釈

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

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

準則

  • かっこ。 型パラメーター リストを指定する場合は、かっこで囲む必要があります。また、 Of キーワードを使用してリストを導入する必要があります。 Ofは、一覧の先頭に 1 回だけ使用します。

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

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

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

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

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

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

    各型パラメーターの制約は、他の型パラメーターの制約とは無関係です。

行動

  • Compile-Time 置換。 ジェネリック プログラミング要素から構築された型を作成するときは、型パラメーターごとに定義された型を指定します。 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

こちらも参照ください