C 泛型基礎(二)之泛型型別約束

2021-09-23 08:11:07 字數 1024 閱讀 2771

泛型雖然在例項化時可以指定為任意型別,但是實際業務中,並不是都需要這樣,更多的時候因為業務邏輯而需要新增一些約束。泛型新增約束使用where子句,如listwhere t:class表示t只能是引用型別。下文將展示泛型約束的基本用法與基本概念。

一、約束型別

約束型別有六種,分別是class,struct,基類,介面,new(),unmanaged,其中unmanaged在c#7.3以後版本才支援,new()與其他約束一起使用時必需放在最後。

不允許作為基類約束的型別有:object、array 和 valuetype。 在 c# 7.3 之前,enum、delegate 和 multicastdelegate 也不允許作為基類約束。

二、用法示例

下文將展示如何使用介面型別作為約束。

1、建立ianimal介面,**如下:

public inte***ce ianimal

decimal weight

string selfintroduction();

}2、建立animal類,實現ianimal介面,**如下:

public class animal : ianimal

public string name

public decimal weight

public string selfintroduction()

:i am ,my weight is kg.";}}

3、建立靜態泛型型別約束方法,**如下:

static void show(ienumerableanimals)

where tanimal : ianimal

}4、例項化animal類,呼叫泛型方法,**如下:

static void main(string args)

;show(animals);

console.readkey();

}執行結果如圖:

泛型型別約束

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

c 泛型約束

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

C 泛型約束

約束告知編譯器型別引數必須具備的功能。在沒有任何約束的情況下,型別引數可以是任何型別。編譯器只能假定 system.object 的成員,它是任何 net 型別的最終基類。有關詳細資訊,請參閱使用約束的原因。如果客戶端 嘗試使用約束所不允許的型別來例項化類,則會產生編譯時錯誤。通過使用where上下...