成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C# 泛型的優點淺談

開發 后端
C# 泛型的優點是什么呢?C# 泛型的優點在實際開發中的應用是如何的呢?那么本文就向你詳細介紹這方面的內容。

C# 泛型的優點是什么呢?在公共語言運行庫和C# 語言的早期版本中,通用化是通過在類型與通用基類型 Object 之間進行強制轉換來實現的,泛型提供了針對這種限制的解決方案。通過創建泛型類,您可以創建一個在編譯時類型安全的集合。使用非泛型集合類的限制可以通過編寫一小段程序來演示,該程序利用 .NET Framework 基類庫中的 ArrayList 集合類。ArrayList 是一個使用起來非常方便的集合類,無需進行修改即可用來存儲任何引用或值類型。

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."); 

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

另一個限制是缺少編譯時類型檢查;因為 ArrayList 將把所有項都強制轉換為 Object,所以在編譯時無法防止客戶端代碼執行以下操作:

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 組合在一個 ArrayList 中的做法在創建異類集合時是完全合法的,有時是有意圖的,但這種做法更可能產生編程錯誤,并且直到運行時才能檢測到此錯誤。

在 C# 語言的 1.0 和 1.1 版本中,只能通過編寫自己的特定于類型的集合來避免 .NET Framework 基類庫集合類中的通用代碼的危險。當然,由于此類不可對多個數據類型重用,因此將喪失通用化的優點,并且您必須對要存儲的每個類型重新編寫該類。

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

C#泛型代碼

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

對于客戶端代碼,與 ArrayList 相比,使用 List<T> 時添加的唯一語法是聲明和實例化中的類型參數。雖然這稍微增加了些編碼的復雜性,但好處是您可以創建一個比 ArrayList 更安全并且速度更快的列表,特別適用于列表項是值類型的情況。

C# 泛型的優點的相關內容就向你介紹到這里,希望對你了解和學習C# 泛型的優點有所幫助。

【編輯推薦】

  1. 淺析C# 泛型約束中的一般約束
  2. C# 泛型約束之派生約束淺析
  3. 淺析C# 泛型約束中的構造函數約束
  4. C# 強制類型轉換與C# 泛型淺析
  5. C# 泛型類概念與實例的理解應用淺析
責任編輯:仲衡 來源: MSDN
相關推薦

2009-06-24 10:25:25

C#泛型

2009-08-24 11:35:20

C# 泛型應用

2009-08-19 15:08:30

C#泛型

2009-08-26 09:36:03

C#泛型

2009-08-24 10:29:39

C# 泛型

2013-03-20 09:27:33

C#泛型

2009-09-01 16:14:11

C#泛型

2009-08-24 14:51:25

C# 泛型泛型類型

2009-08-24 15:38:21

C# 泛型數組

2009-09-02 17:38:16

C#泛型支持

2009-08-24 15:12:13

C# 泛型接口

2009-08-24 18:15:24

C# Dictiona

2009-08-24 14:20:13

C# 強制類型轉換

2009-08-24 10:07:57

C#泛型處理

2009-08-26 18:02:05

C#泛型問題

2009-09-02 18:03:19

C#實現泛型類

2009-08-24 18:22:05

C# 泛型編程

2009-08-24 15:50:23

C# 泛型C# 泛型委托

2009-08-24 17:58:19

C# 泛型集合

2009-08-24 17:27:05

C#泛型應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线日韩精品视频 | 一级全黄少妇性色生活免费看 | 国产精品亚洲一区二区三区在线 | 日韩中文字幕在线免费 | 日本精品久久久久 | 亚洲综合在线播放 | 日韩三极| 亚洲欧美一区二区三区在线 | 亚洲国产精品一区二区三区 | 久久激情网 | 国产成人a亚洲精品 | 国产羞羞视频在线观看 | 中文字幕在线视频免费视频 | www.亚洲视频| 性做久久久久久免费观看欧美 | 在线免费观看黄色av | 国产一区二区三区在线视频 | 天天搞夜夜操 | 91麻豆蜜桃一区二区三区 | 成人激情视频在线 | 久久久久久久国产精品影院 | 97国产超碰 | 一久久久 | 超级乱淫av片免费播放 | 成人欧美一区二区三区在线观看 | 国产精品久久久免费 | 久久综合影院 | 日韩在线视频观看 | 国产成人免费视频网站高清观看视频 | 成人午夜精品 | 亚洲午夜精品一区二区三区他趣 | 婷婷久久一区 | 在线不卡视频 | 国产精品久久久久久久 | 精品国产乱码一区二区三 | 欧美日韩中文字幕 | 色婷婷在线视频 | 日本三级网| 久草中文在线 | 欧美国产精品 | 久久久久久999 |