.net自從2.0版本開始就支援泛型。
閒話休提,馬上來看下非泛型的簡化鍊錶類,它可以包含任意型別的物件。
linkedlistnode.cs中:
在鍊錶中,乙個元素引用另乙個元素,所以必須建立乙個類,將其封裝在鍊錶中,並引用下乙個物件。
1linkedlistnode.cs中:public
class
linkedlistnode27
8public
object value 910
public linkedlistnode next
11public linkedlistnode prev
12 }
linkedlist類包含linkedlistnode型別的first,與last屬性,它們分別標誌了鍊錶的頭尾。通過實現getenumerator()方法,可以用foreach語句遍歷鍊錶。
1program.cs中:public
class
linkedlist : ienumerable24
public linkedlistnode last 56
public linkedlistnode addlast(object
node)714
else
1519
return
newnode;20}
2122
public
ienumerator getenumerator()
2330 }
1此時,會出現乙個執行異常,因為把鍊錶中第3個元素轉換成整形時會出現異常。var list1 = new
linkedlist();
2 list1.addlast(2
);3 list1.addlast(4
);4 list1.addlast("6"
);56foreach (int i in
list1)
7
為了避免這種情況,下面建立泛型的鍊錶。
linkedlistnode.cs中:
linkedlistnode類用乙個泛型型別t宣告。屬性value的型別是the,而不是object.
publiclinkedlist.cs中:class linkedlistnode
public t value
public linkedlistnodenext
public linkedlistnodeprev
}
也把linkedlist定義成泛型類。
1publicprogram.cs中: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 }
1現在foreach是型別安全的了。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 }
泛型程式設計之泛型引數
問題 用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的引數型別,其...