日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

泛型

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

泛型概念:

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

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

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

 

為何要使用泛型

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

 

提高代碼復(fù)用

冒泡算法

不用泛型的情況下,如果是整數(shù)類型排序,下面代碼中“?“就應(yīng)為int類型,但如果這時候候我們有需要給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--) { // 對兩個元素進(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)頁面時,先加載模板,模板中含有1些用特殊字符標(biāo)記的占位符,然后從數(shù)據(jù)庫讀取數(shù)據(jù),使用讀出的數(shù)據(jù)將模板中的占位符替換掉。

將上面的方法視為1個模板,將方法所操作的類型視為1個占位符,由因而1個占位符,因此可以代表任何的類型,這和靜態(tài)頁面生成時模板的占位符可以用來代表來自數(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個尖括號,使用這個尖括號來傳遞占位符,也就是類型參數(shù)。

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

當(dāng)需要為1個int類型的數(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個byte類型的數(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)換時產(chǎn)生

2.   拆箱在援用類型向值類型轉(zhuǎn)換時產(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個裝箱操作 } for (int i = 0; i < ListSize; i++) { int value = (int)list[i];//list[i]為援用類型,value為int類型。 進(jìn)行1個拆箱操作 } long endTicks = DateTime.Now.Ticks; Console.WriteLine("使用ArrayList,耗時:{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>,耗時:{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)驗的同學(xué)就能夠看出這段代碼有問題,由于類型不匹配,添加到ArrayList中的是1

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

                                      

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

過編譯,這樣有助于盡早發(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)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 国产精品久久久久久亚洲调教 | 国产高清视频一区二区 | 成人免费观看黄a大片夜月 日韩亚洲欧美一区 | 久久久久久一区 | 亚洲无吗 | 青青草网址 | 精品一区精品二区 | 黄色三级视频 | 日本一区二区中文字幕 | 亚洲欧洲在线视频 | 久久成人高清 | 久久精品无码一区二区三区 | 国产精品久久久久久久久久久久久 | 午夜精品久久久久久久久久蜜桃 | 国产精品成人免费视频 | 黄片毛片在线观看 | 国产精品久久久久久久久久白浆 | 国产一区二区大片在线观看 | 黄网站在线免费看 | 欧美夜夜操 | 99国产精品电影 | 国产精品区一区二区三含羞草 | 九一在线 | 欧美视频亚洲视频 | 日本一区二区在线 | 国产精品福利视频 | 国产一级成人 | 一级片在线播放 | 国产三级在线看 | 午夜性视频 | 天堂精品一区 | 午夜免费 | 国产在线精品91国自产拍免费 | 欧美亚洲第一区 | www.嫩草 | 久久久久久av | 国产精品二区在线 | 久久国产成人精品 | 色偷偷青青草 | 国产三级一区 | 国产成人精品一区二区在线观看 |