类型列表 (Visual Basic)
指定泛型程序元素的类型参数。 多个参数以逗号分隔。 以下是某一类型参数的语法。
语法
[genericmodifier] typename [ As constraintlist ]
组成部分
术语 | 定义 |
---|---|
genericmodifier |
可选。 只能在泛型接口和委托中使用。 可以使用 Out 关键字声明类型协变,或者使用 In 关键字声明逆变。 请参阅 协变和逆变。 |
typename |
必需。 类型参数的名称。 这是将由相应的类型实参所提供的已定义类型替换的占位符。 |
constraintlist |
可选。 要求列表,约束为 typename 提供的数据类型。 如果有多个约束,请将它们括在大括号 ({ } ) 中并使用逗号分隔它们。 必须使用 As 关键字引入约束列表。 在列表的开头只能使用 As 一次。 |
注解
每个泛型编程元素必须至少使用一个类型参数。 类型参数是在其创建泛型类型的一个实例时,客户端代码指定的特定类型(构造的元素)的占位符。 可以定义泛型类、结构、接口、过程或委托。
有关何时定义泛型类型的详细信息,请参阅 Visual Basic 中的泛型类型。 有关类型参数名称的详细信息,请参阅声明的元素名称。
规则
括号。 如果提供类型参数列表,则必须将其括在括号中,并且必须使用 Of 关键字引入列表。 在列表的开头只能使用
Of
一次。约束。 类型参数的约束列表可以任何组合形式包括以下项:
任意数量的接口。 提供的类型必须实现此列表中的每个接口。
最多一个类。 提供的类型必须继承自该类。
New
关键字。 提供的类型必须公开泛型类型可以访问的无参数构造函数。 如果通过一个或多个接口约束类型参数,这很有用。 实现接口的类型不一定公开构造函数,根据构造函数的访问级别,泛型类型中的代码可能无法访问它。Class
关键字或Structure
关键字。Class
关键字约束泛型类型参数,以要求传递给它的任何类型参数是引用类型(例如字符串、数组或委托),或者从类创建的对象。Structure
关键字约束泛型类型参数,以要求传递给它的任何类型参数是值类型(例如结构、枚举或基本数据类型)。 不能在同一个constraintlist
中同时包括Class
和Structure
。
提供的类型必须满足包括在
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