iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 26
0
Software Development

我要轉職成 C# / .NET 工程師系列 第 26

泛型-實作泛型方法

昨天提到泛型是C#2.0搭配.NET Framework 2.0推出的東西,泛型是一種程式碼模板,將型別傳入模板,讓我們產生對應型別的類別、方法或變數等等,減少只是因為型別不同而重複的程式碼。

從以下範例可以看到會員、廠商、員工都有一個方法叫做拿名字,三份拿名字的程式碼幾乎一模一樣,那我們可以改用泛型製作拿名字方法的模板,透過模板這樣一份程式碼可以當三分來用。
https://ithelp.ithome.com.tw/upload/images/20191012/20120420C503TGrXWU.png

實作泛型方法

會員、廠商、員工三個類別都有名稱這個內容函式,所以我們把名字抽出成為三個類別的父類別,好讓我們實作泛型方法時,預先告訴泛型模板傳入的類別T要有名稱這個成員,好來製作拿名字泛型方法。
https://ithelp.ithome.com.tw/upload/images/20191012/20120420AdZmNezIWk.png

開始製作泛型方法如下,我將方法回傳值設為string型別,並把方法設為static,因為這個方法在會員、廠商、員工三個物件之外,設成靜態讓CLR啟動時自動幫我產生方法。
<>之間是型別變數,在<>裡面只有一個T代號,代表這個泛型只有一個型別會變動,會變動的型別習慣用T來表示,例如把型別變數取名成Tkey、Tvalue、T1、T2等等,反正看會用到幾個會變動的型別,就在<>裡面填幾個。
傳入的型別就是隨T變動的型別變數T,並透過where來限制這個T型別要繼承自物件名稱類別,或本身為物件名稱類別。
這樣就有簡單的泛型方法的雛型。
https://ithelp.ithome.com.tw/upload/images/20191012/20120420nj0Kz2wlT4.png
接下來實作方法內容讓紅色警告消除,因為我們回傳的內容是"員工名稱="+名稱,遇到會員類別就是會員名稱、遇到廠商類別就是廠商名稱,這些的共同點是類別名稱,我們可以用GetType()方法拿到類別資料,這個方法是繼承自object所以object都內建的方法,並且讀取Name,就可以拿到類別名稱,便能完成我們的泛型拿名稱方法。

public static string 拿名稱<T>(T 某某) where T : 物件名稱
{
    Type 型別 = 某某.GetType();
    string 回傳名稱 = 型別.Name + "名稱=" + 某某.名稱;
    return 回傳名稱;
}

執行結果:
https://ithelp.ithome.com.tw/upload/images/20191012/20120420uzFwH9bBw1.png


上一篇
集合之 ArrayList的醜、泛型List<T>的好
下一篇
委派 C#1.0
系列文
我要轉職成 C# / .NET 工程師34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言