1. 程式人生 > >C#關鍵字-where(泛型型別約束)

C#關鍵字-where(泛型型別約束)

在定義泛型類時,可以對客戶端程式碼能夠在例項化類時用於型別引數的型別種類施加限制。如果客戶端程式碼嘗試使用某個約束所不允許的型別來例項化類,則會產生編譯時錯誤。這些限制稱為約束。約束是使用 where 上下文關鍵字指定的。下表列出了六種型別的約束:

約束
說明

T:結構
型別引數必須是值型別。可以指定除 Nullable 以外的任何值型別。有關更多資訊,請參見使用可以為 null 的型別(C# 程式設計指南)。

T:類
型別引數必須是引用型別;這一點也適用於任何類、介面、委託或陣列型別。

T:new()
型別引數必須具有無引數的公共建構函式。當與其他約束一起使用時,new() 約束必須最後指定。

T:<基類名>
型別引數必須是指定的基類或派生自指定的基類。

T:<介面名稱>
型別引數必須是指定的介面或實現指定的介面。可以指定多個介面約束。約束介面也可以是泛型的。

T:U
為 T 提供的型別引數必須是為 U 提供的引數或派生自為 U 提供的引數。這稱為裸型別約束