泛型是將型別作為引數來傳遞。
為什麼這樣說,這裡就有個例子
public void swap(int x, int y)
public void swap(char x, char y)
public void swap(string x, string y)
可以看到相同的寫法,只是引數不一樣,這樣寫就特別浪費空間
像上面這個**確實可以用另一種方式代替,就是用object
public void swap(object x, object y)
比如這樣,但是用object會出現裝拆箱操作,這將在託管堆上分配和**大量的變數,若資料量大,則效能損失非常嚴重。在處理引用型別時,雖然沒有裝箱和折箱操作,但將用到資料型別的 強制轉換操作,增加處理器的負擔。
可以限定資料型別
泛型型別引數的約束:關鍵字where
泛型型別引數常用的約束型別
1、where t:struct 要求是值型別引數
2、where t:class 要求是引用型別引數
3、where t:new() 要求這個泛型具有乙個無參構造方法,如果有多個約束,這個要放在最後
4、where t:基類名 這個泛型是該父類或其子類
5、where t:介面名 泛型是實現了該介面的型別
6、where t:int(,string,char,bool等)
public void swap(t t, u u)
泛型方法
格式: 訪問修飾符 返回值型別 方法名《泛型型別引數》(引數列表)
呼叫的時候要加上具體引數型別,比如:
swap(a, a);
泛型方法過載
可以泛型型別引數進行過載
public void swap()
public void swap{}
public void swap{}
泛型結構
修飾符 struct 結構體名《泛型型別引數》
struct pieceofdata
private t _data;
public t data
set}
}
泛型類修飾符 class 類名《泛型型別引數》
public class student
泛型介面
修飾符 inte***ce 介面名《泛型型別引數》協變
class myclass
static void main(string args)
}//動物類
class animal
//狗類,繼承自動物類
class dog : animal
delegate t facttory();
逆變
class myclass
static void main(string args)
}//動物類
class animal
//狗類,繼承自動物類
class dog : animal
不變
不包括in和out關鍵字的委託和介面型別引數叫做不變。這些型別引數不能用於協變或逆變。
c 學習筆記 泛型(Generic)
一 泛型是什麼?1 通過引數化型別來實現在同乙份 上操作多種資料型別。利用 引數化型別 將型別抽象化,從而實現靈活的復用。換句話來說,泛型允許您編寫乙個可以與任何資料型別一起工作的類或方法。2 在 c 語言中泛型方法是指通過泛型來約束方法中的引數型別,也可以理解為對資料型別設定了引數。如果沒有泛型,...
C 梳理 泛型Generic
泛型 generic 允許您延遲編寫類或方法中的程式設計元素的資料型別的規範,直到實際在程式中使用它的時候。換句話說,泛型允許您編寫乙個可以與任何資料型別一起工作的類或方法。c 的泛型類似於c 的模板,您可以通過資料型別的替代引數編寫類或方法的規範。當編譯器遇到類的建構函式或方法的函式呼叫時,它會生...
泛型 generic詳解
泛型 一般只是用來使用泛型 引數化型別,jdk1.5新特性 當泛型指定成確切型別時後續只能操作對應的型別 泛型擦除 編譯期進行型別的確定 泛型的寫法總共有三種寫法 listlist1 new arraylist jdk1.7推薦寫法 listlist2 new arraylist list list...