在定義泛型類時,可以對客戶端**能夠在例項化類時用於型別引數的型別種類施加限制。如果客戶端**嘗試使用某個約束所不允許的型別來例項化類,則會產生編譯時錯誤。這些限制稱為約束。約束是使用 where 上下文關鍵字指定的。下表列出了六種型別的約束:
約束說明
t:struct
型別引數必須是值型別。可以指定除 nullable 以外的任何值型別。有關更多資訊,請參見使用可以為 null 的型別(c# 程式設計指南)。
t:class
型別引數必須是引用型別;這一點也適用於任何類、介面、委託或陣列型別。
t:new()
型別引數必須具有無引數的公共建構函式。當與其他約束一起使用時,new() 約束必須最後指定。
t:《基類名》
型別引數必須是指定的基類或派生自指定的基類。
t:《介面名稱》
型別引數必須是指定的介面或實現指定的介面。可以指定多個介面約束。約束介面也可以是泛型的。
C 泛型約束
約束告知編譯器型別引數必須具備的功能。在沒有任何約束的情況下,型別引數可以是任何型別。編譯器只能假定 system.object 的成員,它是任何 net 型別的最終基類。有關詳細資訊,請參閱使用約束的原因。如果客戶端 嘗試使用約束所不允許的型別來例項化類,則會產生編譯時錯誤。通過使用where上下...
C 泛型約束
一 泛型約束 預設情況下,泛型的型別引數可以是任何型別的。為什麼要使用型別引數的約束呢?簡單點說就是篩選型別引數,在使用泛型的 中如果違反了某個約束不允許的型別來例項化則會產生編譯錯誤,型別引數的約束是使用關鍵字where。下面列出了6中型別的約束 泛型約束有以下幾種 where t base cl...
C 泛型約束
范型中注意要用default返回預設值。范型約束where可以約束指定泛型型別是某種類或某種結構體,只能指定預設建構函式的約束不能指定其它形式的建構函式的約束,介面不能指定操作符過載。where t struct t是值型別 where t class t是引用型別 where t ifoo t必須...