泛型的優勢

一、性能編程

  對值類型使用非泛型集合類,在把值類型轉換爲引用類型,和把引用類型轉換爲值類型時,須要進行裝箱和拆箱操做。裝箱和拆箱的操做很容易實現,可是性能損失較大。假如使用泛型,就能夠避免裝箱和拆箱操做。安全

1 ArrayList list=new ArrayList();
2 list.Add(20);    //裝箱,list存放的是object類型元素,須將值類型轉化爲引用類型
3 int i=(int)list[0];     //拆箱,list[0]的類型是object,要賦值就得把引用類型轉化爲值類型

  若是換成泛型編程,就不會有裝箱和拆箱的性能損失。性能

1 List<T> list=new List<int>();
2 list.Add(20);    //由於指定了用int來實例化,所以沒必要裝箱
3 int i=list[0];    //一樣地,訪問時也不須要拆箱

二、類型安全spa

  與ArrayList類同樣,若是使用對象,能夠在這個集合中添加任意類型。code

若是使用非泛型編程,以下代碼,就有可能在某些狀況下會發生異常。對象

1 ArrayList list=new ArrayList();
2 list.Add(20);
3 list.Add("string");
4 list.Add(new MyClass());
5 
6  foreach(int i in list)
7 {
8        Console.WriteLine(i);    //這裏會有個異常,由於並非集合中的全部元素均可以轉化爲int
9  }

  若是該用泛型編程,則能夠避免這種異常,讓編譯器檢查出錯誤。blog

1 List<int> list=new List<int>();
2 list.Add(20);
3 lsit.Add(」string」);   //編譯時報錯,只能報整數類型添加到集合中
4 list.Add(new MyClass());   //同上
相關文章
相關標籤/搜索