擴充方法
(Extension Methods)

為什麼要用擴充方法?

擴充方法是一種特殊的靜態方法,但是需將它們當成擴充型別上的執行個體方法 (Instance Method) 來呼叫

擴充方法讓您能將方法「加入」至現有型別,而不需要建立新的衍生型別 (Derived Type)、重新編譯,或是修改原始型別;也就是說在沒有原使碼的情況之下,也能為型別進行擴充

不會破壞既有的類別的原始核心,符合開放、封閉原則

實例:微軟運用擴充方法,將舊有的集合物件增加功能

LINQ to Objects 的方法內容,大部分都寫在 System.Linq 裡的Enumerable 這個 static class 中,絕大部分,都是針對IEnumerable<T> 這個泛型介面進行擴充

只要類別有實作 IEnumerable<T> 並引用System.Linq 就能享有擴充方法

注意事項:

不要針對 System.Object 型別進行擴充

擴充方法須被管控,萬一有名稱衝突,很難除錯

實作

Sample:SimpleExtend

Fluent Interface 實作的另一種方式

宣告成靜態類別

r

public static class MyExtension{ }

宣告成靜態方法,第一個參數代表欲擴充的型別,並加上this修飾詞

r

public static bool IsAllNumber(this string str) { return str.All(char.IsNumber); }

引用 using 擴充方法的命名空間

統一管理,散落在四處的擴充方法,可能會發生方法名稱衝突