Generics
泛型,讓我們可以用更有彈性的方式來設計Class、Method,操作資料
C# DB JAVA 都是強烈型態的語言,你必須告訴他到底此參數為合型態才不會有編譯錯誤的問題
但是這也造成code上缺乏彈性的問題
方法泛型 (Generic Method)
假設 我們寫了一個方法是計算兩個整數的加總,但當我們要計算浮點數(double)時,就無法使用這個方法
public void calN(int a,int b){
Console.writeLine(a+b);
}
因此,這時就是泛型強大的地方。
例如:我們的s方法會輸出我們所傳遞的參數類型(GetType) value,這時後透過泛型類型 <型別參數T>來代表型別(int, string, double...) 可以先不定義到底要是怎樣的類型
而在呼叫給他類型便可以印出
namespace ConsoleApplication1
{
class Program
{
public void s<T>(T a)
{
Console.WriteLine("參數類型" + a.GetType()+",值"+a);
}
static void Main(string[] args)
{
Program p = new Program();
p.s<int>(2);
p.s<string>("dd");
}
}
}
很酷的一點是當我們沒告訴s方法他到底是什麼類型的參數時,最後編譯出來的仍可以輸出上面那個輸出框
因為C#在編譯時,自己會自動判斷參數類型
namespace ConsoleApplication1
{
class Program
{
public void s<T>(T a)
{
Console.WriteLine("參數類型" + a.GetType()+",值"+a);
}
static void Main(string[] args)
{
Program p = new Program();
p.s(2);
p.s("dd");
}
}
}
類別泛型 (Generic Class)
類別的泛型,一樣在class使用泛型,且直接加上 <型別參數T> 即可
Resize參考
namespace ConsoleApplication1
{
public class Program<T>
{
T[] array = new T[0];
//一個一個加入
public void add(T item)
{
// 將一維陣列中的項目數目變更為指定的新大小。
Array.Resize(ref array, array.Length + 1);
array[array.Length - 1] = item;
}
public T[] all()
{
return array;
}
}
class a
{
static void Main(string[] args)
{
Program<int> p = new Program<int>();
p.add(3);
p.add(5);
p.add(6);
foreach (int row in p.all())
{
Console.WriteLine(row);
}
}
}
}
參考資料: