类型列表 (Visual Basic)

指定泛型编程元素的类型参数。 多个参数用逗号分隔。 下面是一个类型参数的语法。

语法

[genericmodifier] typename [ As constraintlist ]

部件

术语 定义
genericmodifier 可选。 只能在泛型接口和委托中使用。 可以使用 Out 关键字或使用 In 关键字声明类型协变。 请参阅 协变和逆变
typename 必填。 类型参数的名称。 这是一个占位符,由相应的类型参数提供的已定义类型替换。
constraintlist 可选。 约束可为其 typename提供的数据类型的要求列表。 如果你有多个约束,请将它们括在大括号({ })中,并使用逗号分隔它们。 必须使用 As 关键字引入约束列表。 只需在列表开头使用 As 一次。

注解

每个泛型编程元素必须至少采用一个类型参数。 类型参数是特定类型( 构造元素)的占位符,客户端代码在创建泛型类型的实例时指定该占位符。 可以定义泛型类、结构、接口、过程或委托。

有关何时定义泛型类型的详细信息,请参阅 Visual Basic 中的泛型类型。 有关类型参数名称的详细信息,请参阅 声明的元素名称

规则

  • 括弧。 如果提供类型参数列表,则必须将其括在括号中,并且必须使用 Of 关键字引入该列表。 只需在列表开头使用 Of 一次。

  • 约束。 类型参数 的约束 列表可以包含在任意组合中:

    • 任意数量的接口。 提供的类型必须实现此列表中的每个接口。

    • 最多一个类。 提供的类型必须继承自该类。

    • New 关键字。 提供的类型必须公开泛型类型可以访问的无参数构造函数。 如果按一个或多个接口约束类型参数,这非常有用。 实现接口的类型不一定公开构造函数,并且根据构造函数的访问级别,泛型类型中的代码可能无法访问它。

    • 关键字 ClassStructure 关键字。 关键字 Class 约束泛型类型参数,要求传递给它的任何类型参数都为引用类型,例如字符串、数组或委托,或者从类创建的对象。 关键字 Structure 约束泛型类型参数,要求传递给它的任何类型参数都为值类型,例如结构、枚举或基本数据类型。 不能同时包含和ClassStructure在同一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

另请参阅