新聞中心
.NET Framework應(yīng)用程序能夠?yàn)殚_(kāi)發(fā)人員提供一個(gè)可以進(jìn)行WEB應(yīng)用程序部署的開(kāi)發(fā)環(huán)境,***程度上幫助程序員提高編程效率。.NET Framework泛型是在.NET Framework2.0的公共語(yǔ)言運(yùn)行庫(kù)(CLR)中的增加的一項(xiàng)新功能,類似于C++的[[模版(程序設(shè)計(jì)語(yǔ)言),但不如C++的模板靈活,不過(guò)也有一些自己的特性。#t#

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)公司推出甘泉免費(fèi)做網(wǎng)站回饋大家。
泛型為.NET Framework引入了類型參數(shù)的概念,這樣便可以設(shè)計(jì)出這樣的類和方法:它們把指定類型的工作推遲到客戶端代碼聲明并實(shí)例化類或方法的時(shí)候執(zhí)行。比如,通過(guò)泛型類型參數(shù)T,程序員就可以編寫其他客戶端代碼能夠使用的單個(gè)類,而不用擔(dān)心強(qiáng)制轉(zhuǎn)換或裝箱操作而帶來(lái)的額外的運(yùn)行成本或風(fēng)險(xiǎn)。
.NET Framework泛型編程
泛型類和方法較之非泛型類和方法具有更高的可用性、類型安全和效率,且通常用在集合和集合上運(yùn)行的方法中。在.NET Framework2.0的類庫(kù)中添加了一個(gè)新的命名空間System.Collections.Generic,其中含有一些新的基于泛型的集合類。微軟建議程序員在設(shè)計(jì)面向.NET Framework 2.0的應(yīng)用程序時(shí)不要使用舊的非泛型集合類(像ArrayList集合類),而去使用新的泛型集合類。
當(dāng)然,程序員也可以創(chuàng)建自己的泛型類和方法,提供自己需要的解決方案,但微軟不推薦自己創(chuàng)建泛型類,而建議使用.NET Framework類庫(kù)中提供的List
可以通過(guò)泛型類型參數(shù)傳遞一個(gè)類型(如一個(gè)類TestClass
.NET Framework泛型類型參數(shù)
在定義泛型類或方法中,類型參數(shù)是客戶端程序?qū)嵗盒皖愖兞繒r(shí)指定的類型占位符。泛型類不能像通常的類那樣使用,因?yàn)樗鼘?shí)際上并不是一個(gè)類型,可能更像一個(gè)類型的藍(lán)圖。要使用泛型類,客戶端代碼必須要指定尖括號(hào)中的類型參數(shù)并實(shí)例化類型才能構(gòu)造類型。指定的類型參數(shù)可以是編譯器可以識(shí)別的任何類型,并且可以構(gòu)造任意數(shù)目的使用不同類型參數(shù)的實(shí)例。
命名規(guī)則
通常,微軟推薦采用如下命名規(guī)則:
除非單個(gè)字母可以讓其他編寫者了解其含義,而描述性名稱并不能帶來(lái)更多其他的意義,應(yīng)該使用描述性短語(yǔ)作為類型參數(shù)的名稱
推薦使用T作為單個(gè)字母類型參數(shù)的參數(shù)名
應(yīng)該將T作為有描述性的類型參數(shù)名前綴
推薦在鏟水泥各種指出對(duì)這個(gè)類型參數(shù)的約束(如將帶有 ISession 約束的參數(shù)名寫為TSession)
.NET Framework泛型參數(shù)的約束
對(duì)于泛型參數(shù)的約束是指對(duì)客戶端代碼實(shí)例化類時(shí)指定的類型參數(shù)進(jìn)行限制,這樣如果客戶端的程序參試使用某個(gè)不允許使用的類型實(shí)例化類時(shí)會(huì)產(chǎn)生編譯時(shí)錯(cuò)誤。
約束采用where上下文關(guān)鍵字指定。
為什么使用約束
若要對(duì)泛型列表中的項(xiàng)與其他某個(gè)項(xiàng)進(jìn)行比較,便一起需要在一定程度上保證她說(shuō)調(diào)用的運(yùn)算符或方法可以得到指定的類型參數(shù)的支持。這個(gè)保證正是建立在對(duì)泛型類定義的一個(gè)或多個(gè)約束獲得的。一旦編譯器得到了這樣的保證,它就能夠允許在泛型類中調(diào)用一些無(wú)約束的泛型中不允許使用的方法。
未綁定的類型參數(shù)
沒(méi)有進(jìn)行約束的泛型類型參數(shù)稱為未綁定的類型參數(shù)。
當(dāng)使用未綁定的類型參數(shù)時(shí),相對(duì)于使用了約束的類型參數(shù),有以下規(guī)則:
不允許使用!=和==運(yùn)算符,因?yàn)榫幾g器無(wú)法保證獲得實(shí)例化時(shí)賦予的類型參數(shù)的支持;但可以與null進(jìn)行比較。如果類型參數(shù)為值類型的話,一定返回false。
可以與System.Object將互相轉(zhuǎn)換,也可以將它們顯式地轉(zhuǎn)換為任何借口類型
裸類型約束
泛型類
泛型類可以擁有至少一個(gè)泛型類型參數(shù),泛型類型參數(shù)可以代替泛型類的字段、屬性、方法的參數(shù)和返回值、事件的參數(shù)和返回值、構(gòu)造函數(shù)的參數(shù)的類型,也可作為內(nèi)部類和基類以及實(shí)現(xiàn)接口的泛型類型參數(shù)。
泛型類必須在創(chuàng)建其實(shí)例時(shí)明確指定其所有泛型類型參數(shù)的類型。泛型類的構(gòu)造函數(shù)不能自動(dòng)推斷其泛型類型的泛型類型參數(shù)。
如果從泛型類派生,可以選擇確定的泛型類型參數(shù),也可以用泛型派生類,利用泛型派生類的泛型類型參數(shù)確定基類的泛型類型參數(shù)。
泛型接口
泛型接口的使用大體上與泛型類相同,只是接口不允許包含字段和構(gòu)造函數(shù),也不允許創(chuàng)建實(shí)例。實(shí)現(xiàn)接口時(shí),同樣也可以選擇實(shí)現(xiàn)確定的泛型類型接口,或者利用泛型類型參數(shù)確定接口的泛型類型參數(shù)。
.NET Framework泛型方法
泛型方法可以擁有至少一個(gè)泛型類型參數(shù),泛型類型參數(shù)可以作為方法的參數(shù)或返回值的類型。泛型方法不用明確指定各泛型類型參數(shù),可由上下文自動(dòng)推斷,如果上下文無(wú)法自動(dòng)推斷,則必須明確指定。
泛型委托
泛型委托的使用大體上與泛型方法相同,泛型委托的泛型類型參數(shù)可以在創(chuàng)建時(shí)通過(guò)上下文自動(dòng)推斷。泛型委托實(shí)例總是具有確定的泛型類型參數(shù)。
反射
.NET Framework泛型和C++中模版的區(qū)別
泛型和模版都是用于提供類型參數(shù)支持的語(yǔ)言功能,但這兩者有著諸多差異。
從語(yǔ)法層面上來(lái)說(shuō),一般認(rèn)為泛型是一種相對(duì)模版簡(jiǎn)單的方法,而不具有模版的復(fù)雜性。但同時(shí),泛型也不能提供模版的完整功能。
另一方面,從實(shí)現(xiàn)層面,泛型的替換是在運(yùn)行時(shí)執(zhí)行的,這樣可以為實(shí)例化的對(duì)象保留泛型類型的信息。
下面列出了泛型和模版之間的主要區(qū)別:
泛型沒(méi)有提供與模版相同程度的靈活性(如泛型不能調(diào)用算數(shù)運(yùn)算符)
泛型不允許非類型模版參數(shù)(如template C
泛型不支持顯式的特定類型模版的自定義實(shí)現(xiàn)
泛型不支持類型參數(shù)子集的自定義實(shí)現(xiàn)
泛型中不允許將類型參數(shù)作泛型類型的基類
泛型不允許類型參數(shù)具有默認(rèn)類型,而必須在實(shí)例化時(shí)指定
.NET Framework泛型類型參數(shù)自身不能是泛型,但C++確實(shí)允許模版參數(shù)。
C++允許程序員編寫可能對(duì)模版中某些類型參數(shù)無(wú)效的代碼,然后將檢查該代碼中是否有用作類型參數(shù)的特定類型。比如說(shuō)可以在C++中編寫對(duì)類型參數(shù)對(duì)象的算術(shù)運(yùn)算符的函數(shù),這樣在用不支持這些運(yùn)算符的類型實(shí)例化模版時(shí)出現(xiàn)出現(xiàn)錯(cuò)誤;而泛型是不允許這樣的,它則要求相應(yīng)地編寫類當(dāng)中的代碼,使他們能夠滿足任何約束的類型。因此唯一允許的語(yǔ)言構(gòu)造是那些能夠從約束中推導(dǎo)出來(lái)的結(jié)構(gòu)。
新聞名稱:.NETFramework泛型知識(shí)講解
網(wǎng)站路徑:http://www.dlmjj.cn/article/cojjehg.html


咨詢
建站咨詢
