多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > 泛型

泛型

來源:程序員人生   發(fā)布時(shí)間:2015-04-03 08:18:34 閱讀次數(shù):3100次

泛型概念:

泛型是公共語言運(yùn)行時(shí)和編程語言提供的1種機(jī)制,它支持另外1種情勢的代碼重用,也就是算法重用.

泛型包括泛型類,泛型接口,泛型拜托,泛型方法,并不是只包括簡單的泛型類.在C#中,其他例如,屬性,索引器,事件,操作符方法,構(gòu)造器本身不能有類型參數(shù)T.

T(類型參數(shù)),它的目的在于指明它操作的是1個(gè)未指定的數(shù)據(jù)類型,在源代碼中能夠使用數(shù)據(jù)類型的地方都可使用它.

 

為何要使用泛型

通過使用泛型,可以極大地提高代碼的重用度,同時(shí)還可以取得強(qiáng)類型的支持,提升了利用程序的性能,避免了隱式的裝箱、拆箱,和運(yùn)行時(shí)的類型轉(zhuǎn)換毛病。

 

提高代碼復(fù)用

冒泡算法

不用泛型的情況下,如果是整數(shù)類型排序,下面代碼中“?“就應(yīng)為int類型,但如果這時(shí)候候我們有需要給byte類型排序,就要復(fù)制1遍代碼,然后把int改成byte。這明顯不能體現(xiàn)代碼的復(fù)用。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>public class SortHelper { public void BubbleSort(?[] array) { int length = array.Length; for (int i = 0; i <= length - 2; i++) { for (int j = length - 1; j >= 1; j--) { // 對兩個(gè)元素進(jìn)行交換 if (array[j] < array[j - 1]) { temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; } } } } </strong></span>

做網(wǎng)站為了提高代碼復(fù)用,我們通常使用模板它的具體做法是:每次生成靜態(tài)頁面時(shí),先加載模板,模板中含有1些用特殊字符標(biāo)記的占位符,然后從數(shù)據(jù)庫讀取數(shù)據(jù),使用讀出的數(shù)據(jù)將模板中的占位符替換掉。

將上面的方法視為1個(gè)模板,將方法所操作的類型視為1個(gè)占位符,由因而1個(gè)占位符,因此可以代表任何的類型,這和靜態(tài)頁面生成時(shí)模板的占位符可以用來代表來自數(shù)據(jù)庫中的任何數(shù)據(jù)道理是1樣的。

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>public class SortHelper<T> { public void BubbleSort(T[] array){ // 冒泡排序方法實(shí)現(xiàn)體 } } </strong></span>

在類型名稱的后面加了1個(gè)尖括號,使用這個(gè)尖括號來傳遞占位符,也就是類型參數(shù)。

接下來,看1下如何使用泛型。

當(dāng)需要為1個(gè)int類型的數(shù)組排序時(shí):

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>SortHelper<int> sorter = new SortHelper<int>(); int[] array = { 8, 1, 4, 7, 3 }; sorter.BubbleSort(array); </strong></span>

當(dāng)需要為1個(gè)byte類型的數(shù)組排序時(shí):

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>SortHelper<byte> sorter = new SortHelper<byte>(); byte [] array = { 8, 1, 4, 7, 3 }; sorter.BubbleSort(array); </strong></span>

性能對照

拆裝箱

1.   裝箱在值類型向援用類型轉(zhuǎn)換時(shí)產(chǎn)生

2.   拆箱在援用類型向值類型轉(zhuǎn)換時(shí)產(chǎn)生

代碼演示

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { const int ListSize = 500000; static void Main(string[] args) { UseArrayList(); UseGenericList(); Console.ReadKey(); } private static void UseArrayList() { ArrayList list = new ArrayList(); long startTicks = DateTime.Now.Ticks; for (int i = 0; i < ListSize; i++) { list.Add(i);//i為int類型,list為援用類型, 存在1個(gè)裝箱操作 } for (int i = 0; i < ListSize; i++) { int value = (int)list[i];//list[i]為援用類型,value為int類型。 進(jìn)行1個(gè)拆箱操作 } long endTicks = DateTime.Now.Ticks; Console.WriteLine("使用ArrayList,耗時(shí):{0} ticks", endTicks - startTicks); } private static void UseGenericList() { List<int> list = new List<int>(); long startTicks = DateTime.Now.Ticks; for (int i = 0; i < ListSize; i++) { list.Add(i); } for (int i = 0; i < ListSize; i++) { int value = list[i]; } long endTicks = DateTime.Now.Ticks; Console.WriteLine("使用List<int>,耗時(shí):{0} ticks", endTicks - startTicks); } } } </strong></span>

運(yùn)行效果



類型安全

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>ArrayList list = new ArrayList(); int i = 100; list.Add(i); string value = (string)list[0]; </strong></span>

有些經(jīng)驗(yàn)的同學(xué)就能夠看出這段代碼有問題,由于類型不匹配,添加到ArrayList中的是1

個(gè)int類型,而獲得時(shí)卻想將它轉(zhuǎn)換為string類。但是編譯器不能辨認(rèn),不論是int也好,string也好,它們都是Object類型。在編寫代碼時(shí),編譯器提供給開發(fā)者的最大幫助之1就是可以檢查出毛病,也就是常稱的編譯時(shí)毛?。–ompile time error)。當(dāng)使用ArrayList時(shí),對上面的問題,編譯器無能為力,由于它認(rèn)為其是合法的,編譯可以順利通過。這類毛病有時(shí)候隱藏在程序中很難發(fā)現(xiàn),最糟的情況是產(chǎn)品已交付用戶,而當(dāng)用戶在使用時(shí)不巧履行到這段代碼,便會(huì)拋出1個(gè)異常,這時(shí)候的毛病,稱為運(yùn)行時(shí)毛?。≧untime error)。

                                      

通過使用泛型集合,這類情況將不復(fù)存在,當(dāng)試圖進(jìn)行類似上面的轉(zhuǎn)換時(shí),根本沒法通

過編譯,這樣有助于盡早發(fā)現(xiàn)問題:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>List<int> list = new List<int>(); int i = 100; list.Add(i); string value = (string)list[0]; // 編譯毛病 </strong></span>

通過以上這些對照,可以看出泛型給我們編程提供了很大的方便,固然這些只是我查到的1些資料加上自己的整理和實(shí)踐,如有不足的地方請大家批評指正。



生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 快色成人 | 亚洲欧美校园 | 欧美色惰aⅴ | 亚洲欧美在线免费观看 | 92看片淫黄大片看国产片 | 日本亚洲中午字幕乱码 | 亚洲天堂影院 | 精品乱码一区二区三区在线 | 伊人不卡 | 永久在线毛片免费观看 | 国产欧美精品一区二区三区四区 | 日韩精品一区二区三区中文精品 | 亚洲欧美日韩久久一区 | 看一级毛片免费观看视频 | 免费亚洲视频在线观看 | 亚洲天堂视频在线播放 | 伊人网影院 | 波多野一区二区 | 亚欧综合 | 蜜芽一区二区国产精品 | 久久久久久久久久久大尺度免费视频 | 欧美18videosex性 | 毛片色| 全国男人天堂网 | 最新69成人精品毛片 | 亚洲在线观看网站 | www.日本免费 | 免费看国产精品久久久久 | 国产一区二区久久 | 久久精品免视看国产明星 | 亚洲欧美日产综合在线看 | 日韩乱轮 | 天堂最新版www在线观看 | 2020自拍偷区亚洲综合图片 | 中文字幕在线视频播放 | 国内精品亚洲 | 国产精久久一区二区三区 | 五月天精品视频播放在线观看 | 亚洲欧美精品一中文字幕 | 国产精品亚洲国产三区 | 中文字幕 视频一区 |