在系統開發時,不可避免的會需要建立自己的工具和函式。
所以停稿多日的今天,決定來記錄一下好用的C#擴充方法~
首先來看看何謂擴充方法 :
***靜態方法處理***
有時基於需求,某段邏輯有可能在系統中的各個角落不斷的出現。
以往看到的方式多是以靜態類別做處理,這樣做也沒什麼明確的不好。
但除錯看起來就是格外的不順眼~~~
以一個靜態類別StringTool,將string類別所會用到的處理都建立在該類別中,以靜態方法叫用。
所以說了那麼多,那要怎麼使用擴充方法?
***使用擴充方法***
只需在要套用運算子的類型前加上 this (以此例是string),即可如 Instance Method 一樣使用此方法
編譯器會將 this 所接的類別,視為該函式欲擴充的類別,且此參數必須放在參數列的第一個位置。
需要注意,擴充方法必須建立在靜態類別之中,否則以Vitual Studio為例,會出現錯誤 : CS1106 擴充方法必須在非泛型靜態類別中定義
***介紹***
擴充方法( Extension Methods ) 是在C#3.0,所加入的一個功能,為定義在靜態類別的靜態方法。
用途是可以不在原本的類別中加入新方法,而是以上述的方式進行擴充,增加功能。
且不影響原本的類別,所以在設計時,可以專注於實作擴充方法的程式即可。
但須注意,擴充的方法不能與原類別方法既有的Method同名
依據Docs : They can never be used to impersonate existing methods on a type, because all name collisions are resolved in favor of the instance or static method defined by the type itself.
當擴充函式與既有函式同名時,會以類別本身的函式為優先,則擴充函式永遠不會被呼叫到。
類別pen已有設計Write method,此時再替pen擴充同名函式Write,則執行結果如下
會執行類別本身的method,而非擴充函式。
(已有同名函式的狀況下,應考慮override,兩者的差別以及override與new就待下次再開一篇討論~)
參考資料