C#3.0 中使用擴充方法來擴充介面

來源:互聯網
上載者:User
有關擴充方法的一些知識點請參看我的前篇部落格:C#3.0 中的擴充方法 (Extension Methods)
前篇部落格中我重點介紹了兩個特殊情境:
1、擴充方法跟原來類的方法重名時候的處理邏輯
2、擴充方法的嵌套
現在我們來看擴充方法使用的第三個情境:使用擴充方法來擴充介面

應用情境舉例:
我們有時候會發現最初定義的一個介面,在現在環境下,這個介面需要再增加一個函數。有了擴充方法後,我們在這種情況下又多了一種實現的選擇。下面以代碼來說明這個問題:
namespace Hongjun.Guo
{
interface MyInterface
{
void Test01();
}
public class MyClass : MyInterface
{
public void Test01()
{
Console.WriteLine("Test01");
}
} static class MyExtensionMethods
{
public static void MyTest002(this MyInterface ii)
{
ii.Test01();
} } }

調用方法:
using Hongjun.Guo;
static void Main(string[] args)
{
MyInterface mm = new MyClass();
mm.MyTest002();
Console.ReadLine();
}
分析這樣做的好處:
1、如果我們實現 MyInterface 介面的類很多,這些類沒有派生關係,這時候我們要在介面上新增一個函數,按照以前的做法,這個介面的實作類別有多少個,我們就需要改多少個,使用了擴充方法後,我們只需要改一個地方。減少代碼量。如果實現這個介面的類被封裝在不同的組件中,一些組件由於其他原因難以修改,這時候用擴充方法來擴充介面真是給我們一劑良藥呀;
2、擴充方法被調用到,前提條件是擴充方法所在的命名空間被使用了。我們如果把介面跟擴充方法放到同一個命名空間,擴充方法需要引用命名空間的問題就可以認為不存在了。因為你要用這個介面,必然會引用這個命名空間。
3、擴充方法擴充的介面,與你自己實現這個介面的類中自己實現的函數重名時候的問題(這時候也可以簡單認為是這個類 override 了這個函數實現)。
先說結論:這兩個不存在衝突問題,你如果是介面調用,則是擴充方法,如果是實作類別調用,則是實作類別自己的方法,參看我前面部落格對擴充方法跟原來類的方法重名時候的處理邏輯的描述,下面再以一段代碼來描述這個問題。
namespace Hongjun.Guo
{
interface MyInterface
{
void Test01();
}
static class MyExtensionMethods
{
public static void MyTest002(this MyInterface ii)
{
ii.Test01();
} }
public class MyClass : MyInterface
{
public void Test01()
{
Console.WriteLine("Test01");
} public void MyTest002()
{
Console.WriteLine("MyTest002");
}
}
}
調用代碼:
using Hongjun.Guo;
static void Main(string[] args)
{
MyInterface mm = new MyClass();
mm.MyTest002();
Console.WriteLine("***********");
((MyClass)mm).MyTest002(); Console.ReadLine();
}
這段代碼執行的結果是 Test01
***********
MyTest002 分析:
mm.MyTest002(); 這行代碼是介面調用,則使用的是擴充方法。
((MyClass)mm).MyTest002(); 這行代碼調用者類型是MyClass ,MyClass 實現了MyTest002 函數,則不是擴充方法調用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.