類型清單 (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
中包含Class
和Structure
。
提供的型別必須滿足您在
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