《C 高階程式設計》之泛型 1建立泛型類

2022-04-01 05:01:58 字數 2259 閱讀 8598

.net自從2.0版本開始就支援泛型。

閒話休提,馬上來看下非泛型的簡化鍊錶類,它可以包含任意型別的物件。

linkedlistnode.cs中:

在鍊錶中,乙個元素引用另乙個元素,所以必須建立乙個類,將其封裝在鍊錶中,並引用下乙個物件。

1

public

class

linkedlistnode27

8public

object value 910

public linkedlistnode next

11public linkedlistnode prev

12 }

linkedlistnode.cs中:

linkedlist類包含linkedlistnode型別的first,與last屬性,它們分別標誌了鍊錶的頭尾。通過實現getenumerator()方法,可以用foreach語句遍歷鍊錶。

1

public

class

linkedlist : ienumerable24

public linkedlistnode last 56

public linkedlistnode addlast(object

node)714

else

1519

return

newnode;20}

2122

public

ienumerator getenumerator()

2330 }

program.cs中:

1

var list1 = new

linkedlist();

2 list1.addlast(2

);3 list1.addlast(4

);4 list1.addlast("6"

);56foreach (int i in

list1)

7

此時,會出現乙個執行異常,因為把鍊錶中第3個元素轉換成整形時會出現異常。

為了避免這種情況,下面建立泛型的鍊錶。

linkedlistnode.cs中:

linkedlistnode類用乙個泛型型別t宣告。屬性value的型別是the,而不是object.

public

class linkedlistnode

public t value

public linkedlistnodenext

public linkedlistnodeprev

}

linkedlist.cs中:

也把linkedlist定義成泛型類。

1public

class linkedlist: ienumerable2

4public linkedlistnodelast 56

public linkedlistnodeaddlast(t node)714

else

1519

return

newnode;20}

2122

public ienumeratorgetenumerator()

2331}32

33ienumerator ienumerable.getenumerator()

3437 }

program.cs中:

1

class

program214

15var list3 = new linkedlist();

16 list3.addlast("2"

);17 list3.addlast("

four");

18 list3.addlast(null

);19

20foreach (string s in

list3)

2124

console.read();

2526 }

現在foreach是型別安全的了。

泛型程式設計之泛型引數

問題 用c 語言實現求乙個數的平方。分析 乙個數,可以是int double complex等,規則求數的平方 x x 偽 sqrt x return x x 實現一 提供一組用於求不同數字型別的平方函式。int sqrtint int x int sqrtdouble double x 實現二 上...

C 泛型 建立泛型類 例子

public class linkedlistnode public t value public linkedlistnodenext public linkedlistnodeprev public class linkedlist ienumberable public linkedlistn...

泛型 泛型類 泛型方法 泛型擦除

1 是什麼?一種允許我們在不確定引數型別時候使用的型別。例如我不知道a方法應該會傳string還是int,我就用個泛型先佔坑。2 為什麼要用泛型?泛型可以在編譯期自動確定具體型別,檢查型別是否匹配,可以提高 的重用率,減少冗餘編碼。3 泛型與object的區別?像上面說的我不知道方法a的引數型別,其...