C# 提供了泛型,讓我們可以用更有彈性的方式來設計Class、Method,操作資料
透過泛型類型 <型別參數T>來代表型別(int, string, double…)
可以在宣告時再指定型別,
以下透過範例來說明幾種情況的用法:
方法泛型 (Generic Method)
在Method使用泛型,只要在Method後面接上泛型類型 <型別參數T> 就可以在宣告時,再指定型別, 並且,可以搭配.GetType()來檢查型別 範例:
static void MyDemo<T>(T x)
{
Console.WriteLine("您傳入的型別為"+x.GetType()+ ",值=" + x);
}
static void Main(string[] args)
{
MyDemo<string>("Hello");//您傳入的型別為System.String,值=Hello
MyDemo<int>(3);//您傳入的型別為System.Int32,值=3
MyDemo<double>(3.14);//您傳入的型別為System.Double,值=3.14
}
類別泛型(Generics Class)
在class使用泛型,一樣直接加上 <型別參數T> 即可 在這裡示範如何透過Class泛型來手動做一個簡易的list功能
範例:
// Declare the generic class.
public class MyListClass<T>
{
//初始化array,並參考泛型別
T[] innerArray = new T[0];
//Add Method - 新增一個array項目
public void Add(T item)
{
Array.Resize(ref innerArray, innerArray.Length + 1);
innerArray[innerArray.Length - 1] = item;
}
//Get Method - 取得array特定key的value
public T Get(int k) {
return innerArray[k];
}
//All Method - return array
public T[] All()
{
return innerArray;
}
}
static void Main(string[] args)
{
// Declare a list of type int.
MyListClass<int> listA = new MyListClass<int>();
listA.Add(3);
listA.Add(4);
listA.Add(5);
listA.Add(2);
foreach (int row in listA.All()) {
Console.WriteLine(row);
}
}