指定泛型程式設計專案的型別參數。 多個參數會以逗號分隔。 以下是一個類型參數的語法。
語法
[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