泛型是 C#2.0 語言和公共語言運作庫 (CLR) 中的一個新功能。泛型将類型參數的概念引入 .NET Framework,類型參數使得設計如下類和方法成為可能:這些類和方法将一個或多個類型的指定推遲到用戶端代碼聲明并執行個體化該類或方法的時候。例如,通過使用泛型類型參數 T,可以編寫其他用戶端代碼能夠使用的單個類,而不緻引入運作時強制轉換或裝箱操作.
使用泛型類型可以最大限度地重用代碼、保護類型的安全以及提高性能。
泛型最常見的用途是建立集合類。
.NET Framework 類庫在 System.Collections.Generic 命名空間中包含幾個新的泛型集合類。應盡可能地使用這些類來代替普通的類,如 System.Collections 命名空間中的 ArrayList,HashTable等。
下面我們就來說下,幾個泛型集合類的用法:
一.Dictionary
此類在 .NET Framework 2.0 版中是新增的。表示鍵和值的集合。命名空間:System.Collections.Generic,程式集:mscorlib(在 mscorlib.dll 中)
class TestGenericList
{
static void Main()
{
//聲明對象,參數表示,鍵是int類型,值是string類型
Dictionary<int, string> fruit = new Dictionary<int, string>();
try{
//加入重複鍵會引發異常
fruit.Add(1, "蘋果");
fruit.Add(2, "桔子");
fruit.Add(3, "香蕉");
fruit.Add(4, "鳳梨");
//參數錯誤将引發異常,如下所示
//fruit.Add("5", "aa");
}
catch (ArgumentException)
{
Console.WriteLine("添加錯誤!!!");
//因為引入了泛型,是以鍵取出後不需要進行Object到int的轉換,值的集合也一樣
foreach (int i in fruit.Keys)
Console.WriteLine("鍵是:{0} 值是:{1}",i,fruit);
//删除指定鍵,值
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 類的泛型等效類。
//聲明一個泛型類
static void Main()
//聲明一個List對象,隻加入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 類在大多數情況下執行得更好并且是類型安全的。如果對 List 類的類型 T 使用引用類型,則兩個類的行為是完全相同的。但是,如果對類型 T 使用值類型,則需要考慮實作和裝箱問題。
如果對類型 T 使用值類型,則編譯器将特别針對該值類型生成 List 類的實作。這意味着不必對 List 對象的清單元素進行裝箱就可以使用該元素,并且在建立大約 500 個清單元素之後,不對清單元素裝箱所節省的記憶體将大于生成該類實作所使用的記憶體。
其實我們也可以自己定義一個泛型類,如下所示:
//聲明一個泛型類
public class ItemList<T>
void Add(T item) { }
private class ExampleClass { }
// 聲明一個對象,隻能加入int型
ItemList<int> list1 = new ItemList<int>();
//聲明一個對象,隻能加入Student類型,Student類為自定義類
ItemList<Student> list2 = new ItemList<Student>();
泛型的用法還有很多種,如泛型方法,泛型委托,泛型接口等。
部落格園大道至簡
http://www.cnblogs.com/jams742003/轉載請注明:部落格園