麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C# > 正文

C#中使用泛型的優點

2023-05-17 11:41:53
字體:
來源:轉載
供稿:網友

在公共語言運行庫和 C# 語言的早期版本中,通用化是通過在類型與通用基類型 Object 之間進行強制轉換來實現的,而目前泛型提供了針對這種限制的解決方案。通過創建泛型類,您可以創建一個在編譯時類型安全的集合。

使用非泛型集合類的限制可以通過編寫一小段程序來演示,該程序利用 .NET Framework 基類庫中的 ArrayList 集合類。ArrayList 是一個使用起來非常方便的集合類,無需進行修改即可用來存儲任何引用或值類型。

// The .NET Framework 1.1 way to create a list:
System.Collections.ArrayList list1 = new System.Collections.ArrayList();
list1.Add(3);
list1.Add(105);
System.Collections.ArrayList list2 = new System.Collections.ArrayList();
list2.Add("It is raining in Redmond.");
list2.Add("It is snowing in the mountains.");

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

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

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

盡管將字符串和 ints 組合在一個 ArrayList 中的做法在創建異類集合時是完全合法的,有時是有意圖的,但這種做法更可能產生編程錯誤,并且直到運行時才能檢測到此錯誤。

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91av在线影院 | 国产成人高清成人av片在线看 | 在线成人免费视频 | www日韩在线 | 黄色片网站在线播放 | 九九精品在线观看 | 欧美成人一区免费视频 | av久草 | 动漫孕妇被羞羞视频 | 成人免费观看在线视频 | 午夜啪视频 | 精品国产乱码久久久久久久 | 久久精品一二三区 | 麻豆一区二区99久久久久 | 成人三级免费电影 | 精品久久www | 国产黄色毛片 | 牛牛a级毛片在线播放 | 色综合一区二区 | 99精品视频一区二区 | 成人三级电影网址 | 一区二区三区欧美在线观看 | 国产亚洲精品综合一区91555 | 鸳鸯谱在线观看高清 | 斗罗破苍穹在线观看免费完整观看 | 国产亚色 | 精品一区二区亚洲 | 国产精品自拍99 | 国产精品久久久久久久久久久久久久久 | 欧美成人精品一区二区男人小说 | 精品一区二区三区免费 | 91美女啪啪| 欧洲成人综合网 | 亚洲视频观看 | 欧美视频一二三区 | 一区二区国产在线 | 成人三级电影网址 | 草人人| 久久宗合色 | 国产精品99久久久久久久 | 久久网站热最新地址 |