昨天提到泛型是C#2.0搭配.NET Framework 2.0推出的東西,泛型是一種程式碼模板,將型別傳入模板,讓我們產生對應型別的類別、方法或變數等等,減少只是因為型別不同而重複的程式碼。
從以下範例可以看到會員、廠商、員工都有一個方法叫做拿名字,三份拿名字的程式碼幾乎一模一樣,那我們可以改用泛型製作拿名字方法的模板,透過模板這樣一份程式碼可以當三分來用。
會員、廠商、員工三個類別都有名稱
這個內容函式,所以我們把名字抽出成為三個類別的父類別,好讓我們實作泛型方法時,預先告訴泛型模板傳入的類別T要有名稱
這個成員,好來製作拿名字泛型方法。
開始製作泛型方法如下,我將方法回傳值設為string型別,並把方法設為static,因為這個方法在會員、廠商、員工三個物件之外,設成靜態讓CLR啟動時自動幫我產生方法。
<>之間是型別變數,在<>裡面只有一個T代號,代表這個泛型只有一個型別會變動,會變動的型別習慣用T來表示,例如把型別變數取名成Tkey、Tvalue、T1、T2等等,反正看會用到幾個會變動的型別,就在<>裡面填幾個。
傳入的型別就是隨T變動的型別變數T,並透過where來限制這個T型別要繼承自物件名稱類別,或本身為物件名稱類別。
這樣就有簡單的泛型方法的雛型。
接下來實作方法內容讓紅色警告消除,因為我們回傳的內容是"員工名稱="+名稱
,遇到會員類別就是會員名稱、遇到廠商類別就是廠商名稱,這些的共同點是類別名稱,我們可以用GetType()方法拿到類別資料,這個方法是繼承自object所以object都內建的方法,並且讀取Name,就可以拿到類別名稱,便能完成我們的泛型拿名稱方法。
public static string 拿名稱<T>(T 某某) where T : 物件名稱
{
Type 型別 = 某某.GetType();
string 回傳名稱 = 型別.Name + "名稱=" + 某某.名稱;
return 回傳名稱;
}
執行結果: