C 梳理 泛型Generic

2021-08-08 17:20:51 字數 2639 閱讀 4152

泛型(generic)允許您延遲編寫類或方法中的程式設計元素的資料型別的規範,直到實際在程式中使用它的時候。換句話說,泛型允許您編寫乙個可以與任何資料型別一起工作的類或方法。

c#的泛型類似於c++的模板,您可以通過資料型別的替代引數編寫類或方法的規範。當編譯器遇到類的建構函式或方法的函式呼叫時,它會生成**來處理指定的資料型別。下面這個簡單的例項將有助於您理解這個概念:

using system;

using system.collections.generic;

public t getitem(int index)

public void setitem(int index, t value)

}class tester

// 獲取值

for (int c = 0; c < 5; c++)

console.writeline();

// 宣告乙個字元陣列

mygenericarraychararray = new mygenericarray(5);

// 設定值

for (int c = 0; c < 5; c++)

// 獲取值

for (int c = 0; c < 5; c++)

console.writeline();

console.readkey();}}

}

當上面的**被編譯和執行時,它會產生下列結果:

0 5 10 15 20

a b c d e

使用泛型是一種增強程式功能的技術,具體表現在以下幾個方面:

它有助於您最大限度地重用**、保護型別的安全以及提高效能。

您可以建立泛型集合類。.net 框架類庫在 system.collections.generic 命名空間中包含了一些新的泛型集合類。您可以使用這些泛型集合類來替代 system.collections 中的集合類。

您可以建立自己的泛型介面、泛型類、泛型方法、泛型事件和泛型委託。

您可以對泛型類進行約束以訪問特定資料型別的方法。

關於泛型資料型別中使用的型別的資訊可在執行時通過使用反射獲取。

在上面的例項中,我們已經使用了泛型類,我們可以通過型別引數宣告泛型方法。下面的程式說明了這個概念:

using system;

using system.collections.generic;

static void main(string args)

, b = ", a, b);

console.writeline("char values before calling swap:");

console.writeline("c = , d = ", c, d);

// 呼叫 swap

swap(ref a, ref b);

swap(ref c, ref d);

// 在交換之後顯示值

console.writeline("int values after calling swap:");

console.writeline("a = , b = ", a, b);

console.writeline("char values after calling swap:");

console.writeline("c = , d = ", c, d);

console.readkey();}}

}

當上面的**被編譯和執行時,它會產生下列結果:

int values before calling swap:

a = 10, b = 20

char values before calling swap:

c = i, d = v

int values after calling swap:

a = 20, b = 10

char values after calling swap:

c = v, d = i

您可以通過型別引數定義泛型委託。例如:

delegate t numberchanger(t n);

下面的例項演示了委託的使用:

using system;

using system.collections.generic;

delegate t numberchanger(t n);

public static int multnum(int q)

public static int getnum()

static void main(string args)

", getnum());

nc2(5);

console.writeline("value of num: ", getnum());

console.readkey();}}

}

當上面的**被編譯和執行時,它會產生下列結果:

value of num: 35

value of num: 175

泛型 generic詳解

泛型 一般只是用來使用泛型 引數化型別,jdk1.5新特性 當泛型指定成確切型別時後續只能操作對應的型別 泛型擦除 編譯期進行型別的確定 泛型的寫法總共有三種寫法 listlist1 new arraylist jdk1.7推薦寫法 listlist2 new arraylist list list...

泛型(Generic)總結

jdk1.5新增特性 list list newarraylist map map newhashmap map.add suitianshuang 130 set entry map.entryset iterger iterator entry.iterator while iterator.h...

c 學習筆記 泛型(Generic)

一 泛型是什麼?1 通過引數化型別來實現在同乙份 上操作多種資料型別。利用 引數化型別 將型別抽象化,從而實現靈活的復用。換句話來說,泛型允許您編寫乙個可以與任何資料型別一起工作的類或方法。2 在 c 語言中泛型方法是指通過泛型來約束方法中的引數型別,也可以理解為對資料型別設定了引數。如果沒有泛型,...