共用方式為


類型清單 (Visual Basic)

指定泛型程式設計元素的型別參數。 多個參數之間必須使用逗號分隔。 以下是一個型別參數的語法。

語法

[genericmodifier] typename [ As constraintlist ]

組件

詞彙 定義
genericmodifier 選擇性。 只能在泛型介面和委派中使用。 您可以使用 Out 關鍵字來宣告 covariant 型別,或利用 In 關鍵字來使用 contravariant。 請參閱 共變數和反變數
typename 必要。 型別參數的名稱。 這是一個預留位置,可取代為對應型別引數提供的已定義型別。
constraintlist 選擇性。 限制可提供給 typename 之資料型別的需求清單。 如果需使用多個條件約束,請將它們括在大括弧 ({ }) 中並以逗號分隔。 您必須使用 As 關鍵字來引入條件約束清單。 您只在清單開頭使用 As 一次。

備註

每個泛型程式設計元素都必須至少接受一個型別參數。 型別參數是特定型別 (建構元素) 的預留位置,用戶端程式程式碼會在建立泛型型別的執行個體時指定。 您可以定義泛型類別、結構、介面、程序或委派。

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

規則

  • 括號。 如果您提供型別參數清單,必須以括號括住它,而且須使用 Of 關鍵字來引入清單。 您只在清單開頭使用 Of 一次。

  • 限制式。 型別參數的條件約束清單可以包含下列項目的任何組合:

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

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

    • New 關鍵字。 提供的型別必須公開泛型型別可以存取的無參數建構函式。 如果您將型別參數限制為一或多個介面,這會很實用。 實作介面的型別不一定會公開建構函式,而且視建構函式的存取層級而定,泛型型別內的程式碼可能無法存取它。

    • Class 關鍵字或 Structure 關鍵字。 Class 關鍵字會限制泛型型別參數,要求傳遞至它的任何型別引數須為參考型別,例如字串、陣列或委派,或是從類別建立的物件。 Structure 關鍵字會限制泛型型別參數,要求傳遞至它的任何型別引數須為實值型別,例如結構、列舉或基本資料型別。 您不能在相同的 constraintlist 中包含 ClassStructure

    提供的型別必須滿足您在 constraintlist 中包含的每個需求。

    每個型別參數的條件約束都與其他型別參數的條件約束無關。

行為

  • 編譯時間替代。 從泛型程式設計元素建立建構型別時,會為每個型別參數提供已定義的型別。 Visual Basic 編譯器會替代在泛型元素內出現的每個 typename 型別。

  • 沒有條件約束。 如果您沒有對型別參數指定任何條件約束,程式碼會受限於該型別參數的 Object Data Type 所支援的作業和成員。

範例 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

另請參閱