close

在系統開發時,不可避免的會需要建立自己的工具和函式。

所以停稿多日的今天,決定來記錄一下好用的C#擴充方法~

首先來看看何謂擴充方法 : 

***靜態方法處理***

有時基於需求,某段邏輯有可能在系統中的各個角落不斷的出現。

以往看到的方式多是以靜態類別做處理,這樣做也沒什麼明確的不好。

但除錯看起來就是格外的不順眼~~~

image

以一個靜態類別StringTool,將string類別所會用到的處理都建立在該類別中,以靜態方法叫用。

所以說了那麼多,那要怎麼使用擴充方法?

 


 

***使用擴充方法***

image

只需在要套用運算子的類型前加上 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.

當擴充函式與既有函式同名時,會以類別本身的函式為優先,則擴充函式永遠不會被呼叫到。

image

類別pen已有設計Write method,此時再替pen擴充同名函式Write,則執行結果如下

image

會執行類別本身的method,而非擴充函式。

(已有同名函式的狀況下,應考慮override,兩者的差別以及override與new就待下次再開一篇討論~)

 


 

參考資料

C# 筆記:擴充方法

如何執行和呼叫自訂擴充方法 (c # 程式設計手冊)

C# 擴充方法的介紹與實例

How to create an extension method for ToString?
 

arrow
arrow
    創作者介紹
    創作者 律晴音 的頭像
    律晴音

    聆風之境

    律晴音 發表在 痞客邦 留言(0) 人氣()