|
泛型是 C#2.0 語言和公共語言運行庫 (CLR) 中的一個新功能。泛型將類型參數的概念引入 .NET Framework,類型參數使得設計如下類和方法成為可能:這些類和方法將一個或多個類型的指定推遲到客戶端代碼聲明并實例化該類或方法的時候。例如,通過使用泛型類型參數 T,可以編寫其他客戶端代碼能夠使用的單個類,而不致引入運行時強制轉換或裝箱操作. class TestGenericList { static void Main() { //聲明對象,參數表示,鍵是int類型,值是string類型 Dictionary<int, string> fruit = new Dictionary<int, string>(); try{ //加入重復鍵會引發(fā)異常 fruit.Add(1, "蘋果"); fruit.Add(2, "桔子"); fruit.Add(3, "香蕉"); fruit.Add(4, "菠蘿"); //參數錯誤將引發(fā)異常,如下所示 //fruit.Add("5", "aa"); } catch (ArgumentException) { Console.WriteLine("添加錯誤!??!"); } //因為引入了泛型,所以鍵取出后不需要進行Object到int的轉換,值的集合也一樣 foreach (int i in fruit.Keys) { Console.WriteLine("鍵是:{0} 值是:{1}",i,fruit); } 按鍵值對遍歷: foreach(KeyValuePair keyValue in fruit) { Console.WriteLine("鍵是:{0} 值是:{1}", keyValue.Key, keyValue.Value); } //刪除指定鍵,值 fruit.Remove(1); //判斷是否包含指定鍵 if (fruit.ContainsKey(1)) { Console.WriteLine("包含此鍵"); } //清除集合中所有對象 fruit.Clear(); } } Dictionary遍歷輸出的順序,就是加入的順序,這點與Hashtable不同,其它方法如:ContainsKey ,ContainsValue ,Remove 等,使用方法基本一致。二、List類 注意:此類在 .NET Framework 2.0 版中是新增的。表示可通過索引訪問的對象的強類型列表。提供用于對列表進行搜索、排序和操作的方法。命名空間:System.Collections.Generic,程序集:mscorlib(在 mscorlib.dll 中),List 類是 ArrayList 類的泛型等效類。 //聲明一個泛型類 class TestGenericList { static void Main() { //聲明一個List對象和ArrayList對應,只加入string參數 List<string> names = new List<string>(); names.Add("喬峰"); names.Add("歐陽峰"); names.Add("馬蜂"); //遍歷List foreach (string name in names) { Console.WriteLine(name); } //向List中插入元素 names.Insert(2, "張三峰"); //移除指定元素 names.Remove("馬蜂"); } } 在決定使用 List 還是使用 ArrayList 類(兩者具有類似的功能)時,記住 List 類在大多數情況下執(zhí)行得更好并且是類型安全的。如果對 List 類的類型 T 使用引用類型,則兩個類的行為是完全相同的。但是,如果對類型 T 使用值類型,則需要考慮實現和裝箱問題。 如果對類型 T 使用值類型,則編譯器將特別針對該值類型生成 List 類的實現。這意味著不必對 List 對象的列表元素進行裝箱就可以使用該元素,并且在創(chuàng)建大約 500 個列表元素之后,不對列表元素裝箱所節(jié)省的內存將大于生成該類實現所使用的內存。 其實我們也可以自己定義一個泛型類,如下所示: //聲明一個泛型類 public class ItemList<T> { void Add(T item) { } } class TestGenericList { private class ExampleClass { } static void Main() { // 聲明一個對象,只能加入int型 ItemList<int> list1 = new ItemList<int>(); //聲明一個對象,只能加入Student類型,Student類為自定義類 ItemList<Student> list2 = new ItemList<Student>(); } } 泛型的用法還有很多種,如泛型方法,泛型委托,泛型接口等。 |
|
|