1. 程式人生 > >C# - 擴展方法

C# - 擴展方法

調用 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# - 擴展方法