型別清單 (Visual Basic)

指定「泛型」程式設計項目的「型別參數」。 參數之間以逗號來分隔。 下列是其中一個型別參數的語法。

[genericmodifier] typename [ As constraintlist ]

組件

詞彙

定義

genericmodifier

選擇項。 只能用於泛型介面和委派。 您可以使用 Out 關鍵字宣告型別 Covariant,或使用 In 關鍵字宣告型別 Contravariant。 請參閱共變數和反變數 (C# 和 Visual Basic)

typename

必要項。 型別參數的名稱。 這是替代符號 (Placeholder),會替換為對應型別引數所提供的已定義型別。

constraintlist

選擇項。 需求清單,其限制可提供給 typename 的資料型別。 如果有多個條件約束 (Constraint),則請將它們封入大括號 ({ }) 中,並以逗號隔開。 您必須使用 As 關鍵字來引入條件約束清單。 只可在清單開頭,使用一次 As。

備註

每個泛型程式設計項目都至少必須取用一個型別參數。 型別參數是特定型別的替代符號 (「建構的項目」),用戶端程式碼會在建立泛型型別的執行個體時指定此特定型別。 可定義泛型類別 (Class)、結構、介面、程序或委派 (Delegate)。

如需何時定義泛型型別的詳細資訊,請參閱 Visual Basic 中的泛型型別 (Visual Basic)。 如需型別參數名稱的詳細資訊,請參閱宣告項目名稱 (Visual Basic)

規則

  • 括弧如果您提供型別參數清單,必須將它封入括號中,也必須使用 Of 關鍵字來引入該清單。 只可在清單開頭,使用一次 Of。

  • 條件約束型別參數上的「條件約束」(Constraint) 清單可包含下列任何項目的組合:

    • 任意數目的介面。 提供的型別必須實作這個清單中的每個介面。

    • 最多一個類別。 提供的型別必須繼承自該類別。

    • New 關鍵字。 提供的型別必須公開 (Expose) 泛型型別可存取的無參數建構函式。 您限制一或多個介面的型別參數時,這十分有用。 實作介面的型別不一定要公開建構函式,且視建構函式的存取層級而定,泛型型別內的程式碼可能無法加以存取。

    • Class 關鍵字或 Structure 關鍵字兩者其中一個。 Class 關鍵字會約束傳遞給泛型型別參數的型別引數必須是參考型別,例如字串、陣列、委派或從類別建立的物件。 Structure 關鍵字則約束傳遞給泛型型別參數的型別引數必須是實值型別,例如結構、列舉或基礎資料型別 (Elementary Data Type)。 您不能在同一 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

請參閱

工作

HOW TO:使用泛型類別 (Visual Basic)

參考

Of 子句 (Visual Basic)

New 運算子 (Visual Basic)

Object 資料型別

Function 陳述式 (Visual Basic)

Structure 陳述式

Sub 陳述式 (Visual Basic)

In (泛型修飾詞) (Visual Basic)

Out (泛型修飾詞) (Visual Basic)

概念

Visual Basic 中的存取層級

其他資源

共變數和反變數 (C# 和 Visual Basic)