泛型就
是將型別做引數
泛型約束t:
struct
型別引數
必須是值型別
。可以指定除
nullable 以外的任何值型別。 有關更多資訊,請參見 使用可以為 null 的型別(c# 程式設計指南)。t:c
lass
型別引數
必須是引用型別
;這一點也適用於任何
類、介面、委託或陣列
型別。
t:new()
型別引數
必須具有無引數的公共建構函式
。當與其他約束一起使用時,new()
約束必須最後指定。
t:《基類名》
型別引數必須是指定的
基類或派生自指定的基類。
t:《介面名稱》
型別引數
必須是指定的介面或實現指定的介面
。可以指定多個介面約束。約束介面也可以是泛型的。
t:u為 t 提供的型別引數
必須是為 u 提供的引數或派生自為 u
提供的引數。這稱為
裸型別約束。
泛型的應用
泛型類,泛型方法,泛型介面,泛型委託,泛型集合
一句話講,需要資料型別的地方就可以用泛型
常用泛型設計一些通用(基於不同型別的復用)的演算法。
練習案例↓ ab互換
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using system.collections;
namespace demogenric
static void main3(string args)
}//class my
////}
class my
public void swap(ref t a, ref t b)
}class your
public void swap(ref t a, ref t b)
}}
泛型約束 where
namespace demogenric2
}//class mywhere t:struct //值型別:列舉 結構
////class mywhere t : class //引用型別:類,介面,委託
//class mywhere t :animal,ifly
inte***ce ifly
class animal
class dog:animal,ifly
}
學習筆記 泛型
object型別引數有2個問題 1 裝箱拆箱,效能損耗 傳入乙個int值 棧 object又在堆裡面,如果把int傳遞進來,就會把值從棧裡面copy到堆裡 使用的時候,又需要用物件值,又會copy到棧 拆箱 2 型別安全問題,可能會有,因為傳遞的物件是沒有限制的 泛型方法與普通方法效能一致,還能乙個...
泛型學習筆記
泛型是 2.0 版 c 語言和公共語言執行庫 clr 中的乙個新功能。泛型將型別引數的概念引入 net framework,型別引數使得設計如下類和方法成為可能 這些類和方法將乙個或多個型別的指定推遲到客戶端 宣告並例項化該類或方法的時候。例如,通過使用泛型型別引數 t,您可以編寫其他客戶端 能夠使...
C 學習筆記 泛型
泛型將型別引數的概念引入了.net,當我們需要設計類和方法,並將它們的型別制定推遲到客戶端 宣告,並例項化該型別和方法時,可以使用泛型。泛型使之前的想法成為了可能。使用泛型避免了執行時強制轉換或裝箱操作帶來的風險。簡單來說,首先制定乙個特定符號代替實際型別,當建立該型別的例項時,才指定它的實際型別。...