泛型支援的幾種約束

2022-07-13 10:12:11 字數 580 閱讀 5118

有時候因為業務邏輯而需要新增一些約束,泛型新增約束使用where子句

約束說明

where t:struct

對於結構約束,型別t必須是值型別

where t:class

類約束指定型別t必須是引用型別

where t:ifoo

指定型別t必須實現介面ifoo

where t:foo

指定型別t必須派生自基類foo

where t:new()

這是乙個建構函式約束,指定型別t必須有乙個預設建構函式

where t1:t2

這個約束也可以指定,型別t1派生自泛型型別t2

注意:只能為預設建構函式定義建構函式約束,不能為其他建構函式定義建構函式約束。

使用泛型型別還可以合併多個約束。where t:ifoo,new()約束和myclass宣告指定,型別t必須實現ifoo介面,且必須有乙個預設建構函式。(注意:new()與其他約束一起使用時必需放在最後)

注意:在c#中,where子句的乙個重要限制是,不能定義必須由泛型型別實現的運算子。運算子不能再介面中定義。在where子句中,指定定義基類、介面和預設建構函式。

泛型支援的幾種約束型別

約束 說明where t struct 對於結構約束,型別t必須是值型別 where t class 類約束指定型別t必須是引用型別 where t ifoo 指定型別t必須實現介面ifoo where t foo 指定型別t必須派生自基類foo where t new 這是乙個建構函式約束,指定型...

c 泛型約束

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

泛型型別約束

where 泛型型別約束 c 參考 visual studio 2015 其他版本 在泛型型別定義中,where 子句用於指定對下列型別的約束 這些型別可用作泛型宣告中定義的型別引數的實參。例如,可以宣告乙個泛型類 mygenericclass,這樣,型別引數 t 就可以實現 icomparable...