C 泛型委託及約束

2022-07-22 18:48:10 字數 1883 閱讀 3282

泛型委託:

1

namespace

泛型委託216

#region 泛型委託

17public

static

void m1(int

msg)

1821

public

static

void m2(double

msg)

2225

public

static

void m3(float

msg)

2629

public

static

void m4(string

msg)

3033

public

static

void

m5(person msg)

3437

#endregion38}

39class

person ;

4041 }

view code

1

class

program2;

8 list listresult = list.findall(n => n > 4);9

for (int i = 0; i < listresult.count; i++)

1013

console.readkey();14}

1516 }

系統內建的泛型委託

1

class

program2;

10 md(3,4

);11

console.readkey();

1213

//當需要儲存帶返回值的方法的時候,就需要使用另外乙個泛型委託func

14 func md1 = () =>system.datetime.now.toshortdatestring();

15console.writeline(md1());

16console.readkey();

17#endregion

1819}20

21 }

view code

泛型約束

1

#region 泛型約束2//

表示使用泛型約束,約束了t只能是值型別

3class myclasswhere t : struct47

//表示引用型別使用泛型約束,約束了t只能是引用型別

8class myclass2where t : class912

//限制了t必須是實現了某個介面的型別,要求t必須是實現了icomparable介面的型別或者是子型別

13class myclass3where

t : icomparable

1417

//要求t必須是person型別,或者是person類的子型別

18class myclass4where

t : person

1922

//要求t必須是person型別,或者是person類的子型別,而且t必須具有乙個無參的建構函式

23class myclass524

where

t : person

25where t : new

()26

29//

要求v必須是t型別或者t的子型別

30class myclass6where

v : t

3134

35class

person ;

36#endregion

view code

泛型及約束

程式中經常會用到泛型,如 class program,b a,b change ref a,ref b console.writeline after change,a b a,b console.readkey static void change ref t a,ref t b 但有時候會碰到類...

c 泛型約束

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

C 泛型約束

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