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