日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
C#泛型的優(yōu)點(diǎn)淺談

C# 泛型的優(yōu)點(diǎn)是什么呢?在公共語(yǔ)言運(yùn)行庫(kù)和C# 語(yǔ)言的早期版本中,通用化是通過(guò)在類型與通用基類型 Object 之間進(jìn)行強(qiáng)制轉(zhuǎn)換來(lái)實(shí)現(xiàn)的,泛型提供了針對(duì)這種限制的解決方案。通過(guò)創(chuàng)建泛型類,您可以創(chuàng)建一個(gè)在編譯時(shí)類型安全的集合。使用非泛型集合類的限制可以通過(guò)編寫一小段程序來(lái)演示,該程序利用 .NET Framework 基類庫(kù)中的 ArrayList 集合類。ArrayList 是一個(gè)使用起來(lái)非常方便的集合類,無(wú)需進(jìn)行修改即可用來(lái)存儲(chǔ)任何引用或值類型。

C#泛型代碼

 
 
 
  1. // The .NET Framework 1.1 way to create a list:  
  2. System.Collections.ArrayList list1 =   
  3. new System.Collections.ArrayList();  
  4. list1.Add(3);  
  5. list1.Add(105);  
  6.  
  7. System.Collections.ArrayList list2 =   
  8. new System.Collections.ArrayList();  
  9. list2.Add("It is raining in Redmond.");  
  10. list2.Add("It is snowing in the mountains."); 

但這種方便是需要付出代價(jià)的。添加到 ArrayList 中的任何引用或值類型都將隱式地向上強(qiáng)制轉(zhuǎn)換為 Object。如果項(xiàng)是值類型,則必須在將其添加到列表中時(shí)進(jìn)行裝箱操作,在檢索時(shí)進(jìn)行取消裝箱操作。強(qiáng)制轉(zhuǎn)換以及裝箱和取消裝箱操作都會(huì)降低性能;在必須對(duì)大型集合進(jìn)行循環(huán)訪問(wèn)的情況下,裝箱和取消裝箱的影響非常明顯。

另一個(gè)限制是缺少編譯時(shí)類型檢查;因?yàn)?ArrayList 將把所有項(xiàng)都強(qiáng)制轉(zhuǎn)換為 Object,所以在編譯時(shí)無(wú)法防止客戶端代碼執(zhí)行以下操作:

C#泛型代碼

 
 
 
  1. System.Collections.ArrayList list = new System.Collections.ArrayList();  
  2. // Add an integer to the list.  
  3. list.Add(3);  
  4. // Add a string to the list. This will compile, but may cause an error later.  
  5. list.Add("It is raining in Redmond.");  
  6.  
  7. int t = 0;  
  8. // This causes an InvalidCastException to be returned.  
  9. foreach (int x in list)  
  10. {  
  11.     t += x;  

盡管將字符串和 ints 組合在一個(gè) ArrayList 中的做法在創(chuàng)建異類集合時(shí)是完全合法的,有時(shí)是有意圖的,但這種做法更可能產(chǎn)生編程錯(cuò)誤,并且直到運(yùn)行時(shí)才能檢測(cè)到此錯(cuò)誤。

在 C# 語(yǔ)言的 1.0 和 1.1 版本中,只能通過(guò)編寫自己的特定于類型的集合來(lái)避免 .NET Framework 基類庫(kù)集合類中的通用代碼的危險(xiǎn)。當(dāng)然,由于此類不可對(duì)多個(gè)數(shù)據(jù)類型重用,因此將喪失通用化的優(yōu)點(diǎn),并且您必須對(duì)要存儲(chǔ)的每個(gè)類型重新編寫該類。

ArrayList 和其他相似類真正需要的是:客戶端代碼基于每個(gè)實(shí)例指定這些類要使用的具體數(shù)據(jù)類型的方式。這樣將不再需要向上強(qiáng)制轉(zhuǎn)換為 T:System.Object,同時(shí),也使得編譯器可以進(jìn)行類型檢查。換句話說(shuō),ArrayList 需要一個(gè) type parameter。這正是泛型所能提供的。在 N:System.Collections.Generic 命名空間的泛型 List 集合中,向該集合添加項(xiàng)的操作類似于以下形式:

C#泛型代碼

 
 
 
  1. // The .NET Framework 2.0 way to create a list  
  2. List list1 = new List();  
  3.  
  4. // No boxing, no casting:  
  5. list1.Add(3);  
  6.  
  7. // Compile-time error:  
  8. // list1.Add("It is raining in Redmond."); 

對(duì)于客戶端代碼,與 ArrayList 相比,使用 List 時(shí)添加的唯一語(yǔ)法是聲明和實(shí)例化中的類型參數(shù)。雖然這稍微增加了些編碼的復(fù)雜性,但好處是您可以創(chuàng)建一個(gè)比 ArrayList 更安全并且速度更快的列表,特別適用于列表項(xiàng)是值類型的情況。

C# 泛型的優(yōu)點(diǎn)的相關(guān)內(nèi)容就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)C# 泛型的優(yōu)點(diǎn)有所幫助。


網(wǎng)頁(yè)題目:C#泛型的優(yōu)點(diǎn)淺談
當(dāng)前路徑:http://m.5511xx.com/article/djedgdh.html