為了提高應用程式的效率和可用性,C#2.0引入了泛型概念.C#泛型有些類似C++的摸版。
(一)特點
泛型具有以下功能特點:
一、使用泛型可以定義型別安全的資料結構,而無需使用實際的資料類型。
二、通過使用泛型,能夠將資料類型參數化,以此完成代碼重用的目標。這一參數可以應用在類、方法、結構、介面、委託等設計中。
三、泛型可提供編譯期間的類型檢查,減少不必要的顯式類型轉換,減少不必要的裝箱操作,從而提高應用程式的運行效率。
(二)泛型集合
泛型常用於集合應用中。在.NET2.0架構的類庫中,提供了一個新的命名空間System.Collections.Generic,其中包含了一些新的基於泛型的容器類,例如:System.Collections.Generic.Stack
、System.Collections.Generic.Dictionary、System.Collections.Generic.List、System.Collections.Generic.Queue等,這些類庫可以在集合中實現泛型。
下面是一個Stack類具體的應用代碼: //實列化Stack類
System.Collections.Generic.Stack<string> stringStack=new System.Collections.Generic.Stack<string>();
//添加資料
stringStack.Push("常德");
stringStack.Push("北京");
stringStack.Push("武漢");
//轉換為數組
Array stringArray;
stringArray=stringStack.ToArray();
//顯示數組
foreach(string s in stringArray)
{
Response.Write(s);
}
以上代碼中,首先執行個體化了一個Stack類的stringStack,並且設定其參數是string,這說明該類所實現堆棧的資料類型是string。然後,通過Stack類的Push方法壓入3個字串資料,並且使用ToArray方法,將堆棧中的資料轉換到一個數組stringArray中(此時,stringArray是一個字串數組)。最後,使用Response.Write( )方法將數組中的資料顯示出來(逆序顯示,這是堆棧的特性)。
另外,如果要求堆棧中儲存的是int類型,那麼可以使用同樣的方法,只需要修改很少的內容即可實現。
(三)泛型方法
在某些情況下,一個型別參數並不為整個類所必需,而只用於一個特定的方法中。這個情況竟法發上在建立一個需要泛型作為參數的方法時。
一個泛型方法有一個或多個型別參數,並且在方法名後面由“<”和“>”限定符指定。這個型別參數可以用在參數利表、傳回值和方法體中。 public void StackPush<T>(Stack<T> stack, params T[] values)
{
foreach (T value in values)
{
stack.Push(value);
}
}
使用這個方法,可以將多個元素壓入任何Stack<T>中。當調用一個泛型方法時,要在函數的調用中將型別參數放入角括弧中。範例程式碼如下:
Stack<int> stack = new Stack<int>();
StackPush<int>(stack, 1, 2, 3, 4);
在上面的例子中,由於第一個正式參數類型是Stack<int>,並且後面的參數類型都是int,編譯器可以推斷型別參數一定是int,因此在調用泛型的StackPush方法時可以不用提供型別參數。
Stack<int> stack = new Stack<int>();
StackPush(stack, 1, 2, 3, 4);