C#2.0引入了泛型這個(gè)特性,由于泛型的引入,在一定程度上極大的增強(qiáng)了C#的生命力,可以完成C#1.0時(shí)需要編寫(xiě)復(fù)雜代碼才可以完成的一些功能。但是作為開(kāi)發(fā)者,對(duì)于泛型可謂是又愛(ài)又恨,愛(ài)的是其強(qiáng)大的功能,以及該特性帶來(lái)的效率的提升,恨的是泛型在復(fù)雜的時(shí)候,會(huì)呈現(xiàn)相當(dāng)復(fù)雜的語(yǔ)法結(jié)構(gòu)。這種復(fù)雜不僅是對(duì)于初學(xué)者,對(duì)于一些有開(kāi)發(fā)經(jīng)驗(yàn)的.NET開(kāi)發(fā)者,也是一個(gè)不那么容易掌握的特性。

   接下來(lái)我們來(lái)了解一下C#2.0加入的特性:泛型。

一.泛型的基本特性概述:

    在實(shí)際項(xiàng)目開(kāi)發(fā)中,任何API只要將object作為參數(shù)類型和返回類型使用,就可能在某個(gè)時(shí)候涉及強(qiáng)類型轉(zhuǎn)換。提到強(qiáng)類型轉(zhuǎn)換,估計(jì)很多開(kāi)發(fā)者第一反應(yīng)就是“效率”這個(gè)次,對(duì)于強(qiáng)類型的利弊主要看使用者使用的環(huán)境,天底下沒(méi)有絕對(duì)的壞事,也沒(méi)有絕對(duì)的好事,有關(guān)強(qiáng)類型的問(wèn)題不是本次的重點(diǎn),不做重點(diǎn)介紹。

    泛型是CLR和C#提供的一種特殊機(jī)制,支持另一種形式的代碼重用,即“算法重用”。泛型實(shí)現(xiàn)了類型和方法的參數(shù)化,泛型類型和方法也可以讓參數(shù)告訴使用者使用什么類型。

    泛型所帶來(lái)的好處:更好的編譯時(shí)檢查,更多在代碼中能直接表現(xiàn)的信息,更多的IDE支持,更好的性能。可能有人會(huì)疑問(wèn),為什么泛型會(huì)帶來(lái)這么多好處,使用一個(gè)不能區(qū)分不同類型的常規(guī)API,相當(dāng)于在一個(gè)動(dòng)態(tài)環(huán)境中訪問(wèn)那個(gè)API。

    CLR允許創(chuàng)建泛型引用和泛型值類型,但是不允許創(chuàng)建泛型枚舉,并且CLR允許創(chuàng)建泛型接口和泛型委托,CLR允許在引用類型、值類型或接口中定義泛型方法。定義泛型類型或方法時(shí),為類型指定了任何變量(如:T)都稱為類型參數(shù)。(T是一個(gè)變量名,在源代碼中能夠使用一個(gè)數(shù)據(jù)類型的任何位置,都可以使用T)在C#中泛型參數(shù)變量要么成為T(mén),要么至少一大寫(xiě)T開(kāi)頭。

二.泛型類、泛型接口和泛型委托概述:

   1.泛型類:

     泛型類型仍然是類型,所以可以從任何類型派生。使用一個(gè)泛型類型并指定類型實(shí)參時(shí),實(shí)際是在CLR中定義一個(gè)新類型對(duì)象,新類型對(duì)象是從泛型派生自的那個(gè)類型派生的。使用泛型類型參數(shù)的一個(gè)方法在基尼險(xiǎn)那個(gè)JIT編譯時(shí),CLR獲取IL,用指定的類型實(shí)參進(jìn)行替換,然后創(chuàng)建恰當(dāng)?shù)谋镜卮a。

    如果沒(méi)有為泛型類型參數(shù)提供類型實(shí)參,那就么就是未綁定泛型類型。如果指定了類型實(shí)參,該類型就是已構(gòu)造類型。已構(gòu)造類型可以是開(kāi)發(fā)或封閉的,開(kāi)發(fā)類型還包含一個(gè)類ixngcanshu,而封閉類型則不是開(kāi)發(fā)的,類型的每個(gè)部分都是明確的。所有代碼實(shí)際都是在一個(gè)封閉的已構(gòu)造類型的上下文中執(zhí)行。

   泛型類在.NET的應(yīng)用主要在集合類中,大多數(shù)集合類在System.Collections.Generic和System.Collections.ObjectModel類中。下面簡(jiǎn)單的介紹一種泛型集合類:

     (1).SynchronizedCollection:提供一個(gè)線程安全集合,其中包含泛型參數(shù)所指定類型的對(duì)象作為元素.