型リスト

更新 : 2007 年 11 月

ジェネリックなプログラミング要素に型パラメータを指定します。複数のパラメータを指定するときは、コンマ (,) で区切ります。型パラメータを 1 つ定義する場合の構文は次のとおりです。

typename [ As constraintlist ]

指定項目

  • typename
    必ず指定します。型パラメータの名前です。これはプレースホルダです。対応する型引数で指定される定義済みの型に置き換えられます。

  • constraintlist
    省略可能です。typename に指定可能なデータ型を制約する要件のリストです。制約を複数指定する場合は、中かっこ ({ }) で囲み、コンマで区切って記述します。制約リストには As キーワードを付ける必要があります。As はリストの先頭に一度だけ記述します。

解説

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

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

ルール

  • かっこ。 型パラメータのリストを指定する場合は、リストをかっこで囲み、Of キーワードを使って特定する必要があります。Of はリストの先頭に一度だけ記述します。

  • 制約。 型パラメータに対する制約のリストには、次の項目を任意の組み合わせで定義できます。

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

    • 1 つ以下のクラス。指定する型は、そのクラスから継承している必要があります。

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

    • Class (Visual Basic) キーワードまたは Structure (Visual Basic) キーワード。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 でのアクセス レベル

参照

Of

New (Visual Basic)

Class (Visual Basic)

Structure (Visual Basic)

オブジェクト型 (Object)

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

Structure ステートメント

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