- 最後登錄
- 2023-10-9
- 在線時間
- 2705 小時
- 註冊時間
- 2014-12-1
- 閱讀權限
- 20
- 精華
- 0
- UID
- 299258
- 帖子
- 61
- 積分
- 464 點
- 潛水值
- 26470 米
| 如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。 本帖最後由 zxc7827691 於 2019-6-29 05:10 PM 編輯
擴充方法可讓您在現有類型中「加入」方法,而不需要建立新的衍生類型、重新編譯,或是修改原始類型。 擴充方法是一種特殊的靜態方法,但是會將它們當成擴充類型上的執行個體方法來呼叫。
其實最常見的案例就是 Linq 的方法操作 IEnumerable 型態的資料- int[] numbers = new int[] { 1, 2, 3, 4, 5 };
- int sum = numbers.Sum(); // 15
複製代碼
我們發現使用 .Sum() 這個方法是 Linq 套件提供的,Linq 是怎麼擴充出這個方法呢?
查看 Linq 的原始碼發現
- 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,提供客製化方法。我們就能將客製化部分獨立出來,也不會把某些客製功能,破壞到既有的程式架構或邏輯。
更多資料可以參考官網:
以上分享
... |
|