擴充方法
(Extension Methods)
實作
引用 using 擴充方法的命名空間
統一管理,散落在四處的擴充方法,可能會發生方法名稱衝突
宣告成靜態方法,第一個參數代表欲擴充的型別,並加上this修飾詞
public static bool IsAllNumber(this string str)
{
return str.All(char.IsNumber);
}
宣告成靜態類別
public static class MyExtension
{
}
Fluent Interface 實作的另一種方式
Sample:SimpleExtend
注意事項:
擴充方法須被管控,萬一有名稱衝突,很難除錯
不要針對 System.Object 型別進行擴充
為什麼要用擴充方法?
實例:微軟運用擴充方法,將舊有的集合物件增加功能
只要類別有實作 IEnumerable 並引用System.Linq 就能享有擴充方法
LINQ to Objects 的方法內容,大部分都寫在 System.Linq 裡的Enumerable 這個 static class 中,絕大部分,都是針對IEnumerable 這個泛型介面進行擴充
不會破壞既有的類別的原始核心,符合開放、封閉原則
擴充方法讓您能將方法「加入」至現有型別,而不需要建立新的衍生型別 (Derived Type)、重新編譯,或是修改原始型別;也就是說在沒有原使碼的情況之下,也能為型別進行擴充
擴充方法是一種特殊的靜態方法,但是需將它們當成擴充型別上的執行個體方法 (Instance Method) 來呼叫