1. 程式人生 > >C#泛型集合與非泛型集合(轉)

C#泛型集合與非泛型集合(轉)

轉自部落格:

http://www.cnblogs.com/zhxhdean/archive/2011/05/18/2050186.html

在.NET平臺最初發布時,程式設計師使用System.Collections名稱空間下的ArrayList,HashTable,Queue,SortedList,Stack。但歷史證明使用這些型別會導致問題。
第一個問題:導致效能的下降。在操作資料結構時(如值型別),CLR必須執行大量的記憶體轉換操作(裝箱/拆箱),這回降低執行時的執行速度。

int a = 25;
//將int裝箱為object應用
object boxeda=a;
//將引用拆箱為對應的int
int unboxeda=(int)boxeda;
這段程式碼,在記憶體中會發生如下過程:
1.在棧上分配a=25;
2.在託管堆上分配一個新物件;
3.基於棧資料的值被轉移到新分配的記憶體位置;
4.在拆箱時,儲存在堆物件中的值轉移回棧;
5.堆上無用的物件會被回收(GC回收);

第二個問題:這些集合類不是型別安全的。
在一個Person類中新增一個非Person物件將在編譯時錯誤

和非泛型相比,泛型有以下優勢:
1.提供了更好的效能,不會導致裝箱或拆箱的損耗
2.更型別安全,只包含我們指定的型別
3.大幅減少了構建自定義結合型別的需要

泛型類:Dictionary