iT邦幫忙

第 11 屆 iThome 鐵人賽

0
Software Development

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

C# 3.0 擴充方法

fb粉專:https://www.facebook.com/dannyliu.me

我們在處理某些類別的資料時,可能會專門做一個處理資料的類別或方法來處理。
例如,以下是沒有實作轉型運算子的溫度類別:

public class 攝氏
{
    public double 溫度;
}

public class 華氏
{
    public double 溫度;
}

這些類別可能是別人定義好的,若我們需要某些新功能,例如攝氏轉華視,在以前可能需要靠繼承,或是實作一個轉型用的類別才能達到。例如我定義了溫度轉型類別如下:
https://ithelp.ithome.com.tw/upload/images/20191022/201204208Ezq6upIi9.png

因為我設定成靜態方法,在轉型時就是如下方式使用:
https://ithelp.ithome.com.tw/upload/images/20191022/20120420NjGVxxQbIN.png

擴充方法

而在C#3.0開始提供了擴充方法,讓我們在其他類別中撰寫的方法,能出現在目標類別的成員裡面。意思是說透過擴充方法,C#3.0可以把我們剛剛撰寫的溫度轉型類別的溫度轉型方法,偽裝成攝氏或華氏類別自己的方法。

擴充方法的實作方式非常簡單,只要將方法透過this關鍵字指定需要偽裝的型別,就能成為該型別的擴充方法。當然還有兩單點但書:

  • 擴充方法本身需為靜態方法
  • 擴充方法所在類別需為靜態類別

根據以上方式,我們可以快速的把我們剛剛在轉型類別中撰寫的轉型方法,快速成為擴充方法。而this是寫在方法第一個傳入型別前,C#會幫我們把該方法偽裝成第一個傳入型別的方法,在執行時還是執行轉型類別中的方法。所以我們只要做以下修改,就能轉成為擴充方法:
https://ithelp.ithome.com.tw/upload/images/20191022/201204203sETGfkwVR.png

使用這個方法時就能直接使用,C#會提示我們這是擴充方法,非常地方便。
https://ithelp.ithome.com.tw/upload/images/20191022/20120420QOcWtUIBda.png

https://ithelp.ithome.com.tw/upload/images/20191022/20120420r8uQS29Ff5.png


上一篇
現成委派類 - Func <T> 與 Action <T>
下一篇
C# 事件(上) - 使用委派來實作事件
系列文
我要轉職成 C# / .NET 工程師34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言