型リスト (Visual Basic)Type List (Visual Basic)

ジェネリックプログラミング要素の型パラメーターを指定します。Specifies the type parameters for a generic programming element. 複数のパラメーターはコンマで区切られます。Multiple parameters are separated by commas. 1つの型パラメーターの構文を次に示します。Following is the syntax for one type parameter.

構文Syntax

[genericmodifier] typename [ As constraintlist ]

指定項目Parts

用語Term DefinitionDefinition
genericmodifier 省略可。Optional. は、ジェネリックインターフェイスおよびデリゲートでのみ使用できます。Can be used only in generic interfaces and delegates. Inキーワードを使用して、型を共変として宣言することができます。You can declare a type covariant by using the Out keyword or contravariant by using the In keyword. [共変性と反変性] (../../programming-guide/concepts/covariance-contravariance/index.md)を参照してください。See Covariance and Contravariance.
typename 必須。Required. 型パラメーターの名前。Name of the type parameter. これは、対応する型引数によって提供される定義済みの型に置き換えられるプレースホルダーです。This is a placeholder, to be replaced by a defined type supplied by the corresponding type argument.
constraintlist 省略可。Optional. typenameに指定できるデータ型を制限する要件の一覧。List of requirements that constrain the data type that can be supplied for typename. 複数の制約がある場合は、それらを中かっこ ({ }) で囲み、コンマで区切ります。If you have multiple constraints, enclose them in curly braces ({ }) and separate them with commas. 制約リストは As キーワードを使用して導入する必要があります。You must introduce the constraint list with the As keyword. As は、リストの先頭で1回だけ使用します。You use As only once, at the beginning of the list.

コメントRemarks

すべてのジェネリックプログラミング要素は、少なくとも1つの型パラメーターを受け取る必要があります。Every generic programming element must take at least one type parameter. 型パラメーターは、ジェネリック型のインスタンスを作成するときにクライアントコードによって指定される特定の型 (構築された要素) のプレースホルダーです。A type parameter is a placeholder for a specific type (a constructed element) that client code specifies when it creates an instance of the generic type. ジェネリッククラス、構造体、インターフェイス、プロシージャ、またはデリゲートを定義できます。You can define a generic class, structure, interface, procedure, or delegate.

ジェネリック型を定義する場合の詳細については、「 Visual Basic のジェネリック型」を参照してください。For more information on when to define a generic type, see Generic Types in Visual Basic. 型パラメーター名の詳細については、「宣言された要素名」を参照してください。For more information on type parameter names, see Declared Element Names.

ルールRules

  • **Parentheses。Parentheses. 型パラメーターリストを指定する場合は、それをかっこで囲む必要があります。また、with キーワードを使用してリストを導入する必要があります。If you supply a type parameter list, you must enclose it in parentheses, and you must introduce the list with the Of keyword. Of は、リストの先頭に一度だけ記述します。You use Of only once, at the beginning of the list.

  • Constraints.Constraints. 型パラメーターに対する制約の一覧には、次の項目を任意の組み合わせで含めることができます。A list of constraints on a type parameter can include the following items in any combination:

    • 任意の数のインターフェイス。Any number of interfaces. 指定された型は、このリスト内のすべてのインターフェイスを実装する必要があります。The supplied type must implement every interface in this list.

    • クラスは1つだけです。At most one class. 指定された型は、そのクラスから継承する必要があります。The supplied type must inherit from that class.

    • New キーワード。The New keyword. 指定された型は、ジェネリック型がアクセスできるパラメーターなしのコンストラクターを公開する必要があります。The supplied type must expose a parameterless constructor that your generic type can access. これは、1つまたは複数のインターフェイスによって型パラメーターを制約する場合に便利です。This is useful if you constrain a type parameter by one or more interfaces. インターフェイスを実装する型は、必ずしもコンストラクターを公開するわけではありません。また、コンストラクターのアクセスレベルによっては、ジェネリック型内のコードがアクセスできない場合があります。A type that implements interfaces does not necessarily expose a constructor, and depending on the access level of a constructor, the code within the generic type might not be able to access it.

    • Class キーワードまたは Structure キーワード。Either the Class keyword or the Structure keyword. Class キーワードは、ジェネリック型パラメーターを制約して、その型引数が参照型であることを要求します (文字列、配列、デリゲート、クラスから作成されたオブジェクトなど)。The Class keyword constrains a generic type parameter to require that any type argument passed to it be a reference type, for example a string, array, or delegate, or an object created from a class. Structure キーワードは、構造体、列挙型、基本データ型など、型引数が値型であることを要求するジェネリック型パラメーターを制約します。The Structure keyword constrains a generic type parameter to require that any type argument passed to it be a value type, for example a structure, enumeration, or elementary data type. ClassStructure を同じ constraintlistに含めることはできません。You cannot include both Class and Structure in the same constraintlist.

    指定された型は、constraintlistに含まれるすべての要件を満たしている必要があります。The supplied type must satisfy every requirement you include in constraintlist.

    型パラメーターごとの制約は、他の型パラメーターに対する制約とは無関係です。Constraints on each type parameter are independent of constraints on other type parameters.

動作Behavior

  • コンパイル時の置換。Compile-Time Substitution. ジェネリックプログラミング要素から構築された型を作成する場合は、型パラメーターごとに定義済みの型を指定します。When you create a constructed type from a generic programming element, you supply a defined type for each type parameter. Visual Basic コンパイラは、ジェネリック要素内で typename が発生するたびに、指定された型を置き換えます。The Visual Basic compiler substitutes that supplied type for every occurrence of typename within the generic element.

  • 制約が存在しません。Absence of Constraints. 型パラメーターに対して制約を指定しない場合、コードは、その型パラメーターのObject データ型でサポートされている操作とメンバーに制限されます。If you do not specify any constraints on a type parameter, your code is limited to the operations and members supported by the Object Data Type for that type parameter.

Example

次の例は、ジェネリックディクショナリクラスのスケルトン定義を示しています。これには、新しいエントリをディクショナリに追加するスケルトン関数も含まれます。The following example shows a skeleton definition of a generic dictionary class, including a skeleton function to add a new entry to the dictionary.

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

Example

dictionary はジェネリックであるため、このメソッドを使用するコードは、それぞれが同じ機能を持ち、別のデータ型に対して動作する、さまざまなオブジェクトを作成できます。Because dictionary is generic, the code that uses it can create a variety of objects from it, each having the same functionality but acting on a different data type. 次の例は、String エントリと Integer キーを持つ dictionary オブジェクトを作成するコード行を示しています。The following example shows a line of code that creates a dictionary object with String entries and Integer keys.

Dim dictInt As New dictionary(Of String, Integer)

Example

次の例は、前の例で生成された同等のスケルトン定義を示しています。The following example shows the equivalent skeleton definition generated by the preceding example.

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

参照See also