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

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

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

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

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

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

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

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

   1.泛型類:

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

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

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

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

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)
 [ComVisible(false)] public class SynchronizedCollection&l
        
		

網(wǎng)友評論