C# - 擴展方法
阿新 • • 發佈:2019-03-09
調用 rip cnblogs 第一個 不可見 重新編譯 利用 擴展 派生
允許向現有類型"添加"方法,而無需創建新的派生類型、重新編譯或以其他方式修改原始類型。類A需要新增一個方法,但類A是密封的或源代碼不可見,即不能修改類A,此時擴展方法允許在另一個類B中利用類A的公有可用成員實現類A需要新增的方法。
- 擴展方法必須是靜態的,所在類也必須是靜態的;
- 被擴展類型必須作為第一個參數,必須用 this 修飾;
public static class ExtendMyClass { public static 返回類型 Function(this MyClass mc) { // 調用MyClass的公共成員實現新增方法 } }
調用:mc.Function();,如果沒有this,只能以ExtendMyClass.Function(mc);方式調用。
擴展方法還可以結合泛型類,允許將(擴展)類中的靜態方法關聯到不同的泛型類上。擴展接口時,利用擴展方法比繼承接口(會強制要求實現接口下的所有方法)更方便。但是,擴展方法的優先級總是比被擴展類型本身中定義的同名實例方法低,且被擴展類型的子類不能繼承其父類型的擴展方法。
- 將靜態方法轉成擴展方法,擴展方法本質上是靜態方法;
- 編寫幫助類;
- 為 Linq 服務,實現鏈式編程;
參考:談擴展方法的理解; C#擴展方法; 奇思妙想之擴展方法系列;
C# - 擴展方法