public static int Sum(this IEnumerable<int> source);
複製代碼
這種寫法就是所謂的「擴充方法」,撰寫一個靜態類型 MyExt,提供一個靜態方法 MyExtMethod,其中第一個參數就是我們要擴充的類型 this IEnumerable<int>,必須要加上 this ,後面可以添加額外的參數
public static class MyExt
{
public static int MyExtMethod(this IEnumerable<int> source)
{
return 0;
}
}
複製代碼
接著,就可以跟 Linq 一樣,使用自己擴充的功能了
int[] numbers = new int[] { 1, 2, 3, 4, 5 };
int ext = numbers.MyExtMethod(); // 0
複製代碼
其實這個技巧除了可以擴充既有的類別,十分方便。在做產品或大型專案時,依我的經驗最經典的案例就是「標準功能」與「客製化功能」, A 組件的 class 提供標準功能的方法,B 組件則擴充 A 組件的 class,提供客製化方法。我們就能將客製化部分獨立出來,也不會把某些客製功能,破壞到既有的程式架構或邏輯。