我們為什麼要用泛型?簡而言之是為了提高**的泛用性,所以才存在的。假設我需要處理十個類,並且對十個類處理的方法都一樣,如果沒有泛型的話那麼我們需要定義十個方法來處理不同的類,你或許可以將方法中公用的部分提取出來,但是宣告十個方法是不可避免的,但是有了泛型就不一樣了,我們可以將十個方法變為乙個方法,大大的簡化了開發的步驟。
方法的建立
static bool compare(t first, t second) where t:class
else
}
在普通的方法後加上《泛型名稱》宣告乙個帶泛型引數的方法,泛型類可作為輸入和輸出的型別使用。泛型可以設定泛型約束條件來作為泛型的規範,語法為 方法後加 where 泛型名稱:約束條件,上面的**中泛型必須為乙個class,基礎的泛型條件除了class還有struct,stream,idisposable等,約束new()會檢查型別實參是否有乙個可用於建立型別示例的無引數建構函式,此外約束還可以是其他自定義的類,這樣做泛型引數就必須是類本身或者該類的子類。 泛型可一次性宣告多個,並且每個泛型型別也可以繫結多個不互相衝突的約束條件。
操作如下:
class father
class child:father
class child2 : father
class 泛型
static void main(string args)
}
輸出:
此外我們還能夠使用system.activator.createinstance()對泛型來進行例項化操作與使用:
private static listgettlist(int num)
return tlist;
}static void main(string args)
輸出:
甚至可以利用反射來對例項化之後的泛型進行賦值操作,以下是datatable對與其相應泛型的list的轉化。
public static void getmodelist(datatable dtdata, out listmodelist) where t:base
mode.gettype().getfield(dcdata.columnname.tolower()).setvalue(mode, convert.changetype(drdata[dcdata.columnname], (tp == typeof(double?))?typeof(double):tp));
}modelist.add(mode);}}
C 高階 泛型
在沒有泛型的時候,我們想要讓方法接受多種型別的引數,在.net framwork 1.0時代我們會這樣定義乙個方法 public void myaction object myparameter else if myparameter.gettype typeof long else 呼叫 int ...
C 泛型學習
注意push 方法 1.public class stack public void push t item public stack int i stackss new stack 100 ss.push ds 第一種,ss.push ds 編譯通不過,因為 引數t 的型別 必須與 類例項化時定義...
《C 高階程式設計》之泛型 1建立泛型類
net自從2.0版本開始就支援泛型。閒話休提,馬上來看下非泛型的簡化鍊錶類,它可以包含任意型別的物件。linkedlistnode.cs中 在鍊錶中,乙個元素引用另乙個元素,所以必須建立乙個類,將其封裝在鍊錶中,並引用下乙個物件。1 public class linkedlistnode27 8pu...