談一談泛型(Generic)

2022-01-11 06:50:46 字數 1411 閱讀 4090

談一談泛型

首先,泛型是c#2出現的。這也是c#2乙個重要的新特性。泛型的好處之一就是在編譯時執行更多的檢查。

泛型型別和型別引數

​ 泛型的兩種形式:泛型型別( 包括類、介面、委託和結構沒有泛型列舉

下面以dictionary來為例,解釋一下型別引數型別實參(type argument)開放型別封閉型別

上面的例子中,

ps:我覺得吧,記住一些專業術語還是很重要的。比如泛型(generic),實參(argument)和形參(parameter)以及上面的一些專業術語,因為當你在使用 google or stackoverflow時,別到時知道問題但是你輸入不來關鍵字。還有list讀作list of t

接下來談談型別約束(type constraint)與型別推斷(type inference)。

首先是 型別約束,主要有四種約束(constraint)可供使用,約束要放到泛型方法或泛型型別宣告的末尾,並由上下文關鍵字where來引入。

主要有以下四種約束分別是,引用型別約束、值型別約束、建構函式型別約束、轉換型別約束。

接下來展示幾個有效的和無效的例子

class samplewhere t : class, idisposable, new ()   is valid

class samplewhere t : stream where u : idisposable is valid

class samplewhere t : class, struct is invalid

class samplewhere t : stream, u : idisposable is invalid

泛型比較介面icomparericomparable用於排序(判斷猴哥值是小於、等於、還是大於另乙個值),而iequalitycompareriequatable通過某種標準來比較兩個項的相等性,或查詢某個列的雜湊。

可變性 分為 協變性和逆變性,在c#4.0 之前,泛型是不支援可變性的,之後的話,就出現了outin

泛型 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

泛型 generic 允許您延遲編寫類或方法中的程式設計元素的資料型別的規範,直到實際在程式中使用它的時候。換句話說,泛型允許您編寫乙個可以與任何資料型別一起工作的類或方法。c 的泛型類似於c 的模板,您可以通過資料型別的替代引數編寫類或方法的規範。當編譯器遇到類的建構函式或方法的函式呼叫時,它會生...