共用方式為


類型清單 (Visual Basic)

指定泛型程式設計專案的型別參數。 多個參數會以逗號分隔。 以下是一個類型參數的語法。

語法

[genericmodifier] typename [ As constraintlist ]

組件

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

備註

每個泛型程式設計項目都必須至少接受一個類型參數。 類型參數是特定類型( 建構專案)的佔位元元,用戶端程式代碼會在建立泛型類型的實例時指定。 您可以定義泛型類別、結構、介面、程式或委派。

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

規則

  • 括弧。 如果您提供類型參數清單,則必須以括弧括住它,而且您必須使用 Of 關鍵詞來介紹清單。 您只在清單開頭使用 Of 一次。

  • 約束。 類型參數的條件 約束 清單可以包含下列專案的任何組合:

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

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

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

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

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

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

行為

  • Compile-Time 替代。 當您從泛型程式設計專案建立建構型別時,會為每個類型參數提供已定義的類型。 Visual Basic 編譯程式會替代在泛型專案內每次出現的 typename 類型。

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

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

另請參閱