泛型較為廣泛地被討論,這里寫到的只是作為新手的入門級認識。
泛型最常應用于集合類。
泛型的一個顯而易見的優點在于可以在許多操作中避免強制轉換或裝箱操作的成本或風險,拿ArrayList這個集合類來說,為了達到其通用性,集合元素都將向上轉換為object類型,對于值類型,更是有裝箱拆箱的成本:
static void Main(string[] args)
{
ArrayList al = new ArrayList();
al.Add(1);
}
在IL中是:
IL_0008: ldc.i4.1
IL_0009: box [mscorlib]System.Int32
IL_000e: callvirt instance int32 [mscorlib]System.Collections.ArrayList::Add(object)
box操作就是裝箱,具體過程是把值類型從棧中彈出,放入堆中,同時把在堆中的地址壓入到棧中,頻繁出現這樣的操作,成本比較大。
所以在2.0中,遇到以上的應用,應該使用泛型集合類List<T>:
static void Main(string[] args)
{
List<int> l = new List<int>();
l.Add(1);
}
另一個比較常用的泛型集合類是Dictionary<T,T>,用于保存鍵值對:
static void Main(string[] args)
{
Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "SomeBook1");
dict.Add(2, "SomeBook2");
dict.Add(3, "SomeBook3");
Console.WriteLine(dict[2]);//output:SomeBook2
dict[2] = "SomeCD1";//modify
Console.WriteLine(dict[2]);//output:SomeCD1
dict.Remove(2);//delete
foreach (KeyValuePair<int, string> kv in dict)
{
Console.WriteLine("Key = {0}, Value = {1}",kv.Key, kv.Value);
}
}
http://www.survivalescaperooms.com/KissKnife/archive/2006/08/26/486807.html
新聞熱點
疑難解答