C 學習筆記之 泛型 Generic

2022-09-14 17:36:20 字數 1743 閱讀 5609

泛型是將型別作為引數來傳遞。

為什麼這樣說,這裡就有個例子

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...