C#的對象系統是個單根系統,不支援類的多繼承,只支援多介面實現,這在 某種程度帶來了一些不便:我們在系統設計時經常會抽象出一些介面,並為介面 提供一個抽象類別作為預設的實現,然後實際使用的類可以從抽象類別派生。如果一 個類實現了多介面,那我們只能選擇一個抽象類別作為祖先類,再將其他介面的實 現手工加到類中。
這種情況在C#3.0中有了變化,我們現在可以利用C#3.0的擴充方法來實現一 個“受限的多繼承”。
C#3.0中引入了擴充方法,可以利用一個靜態類的靜態方法為一個類或者介面 添加方法,關鍵是添加的方法是包含實現的,由此我們可以在C#3.0中為介面提 供一個帶實現的方法聲明,而無需額外的實作類別!如果一個類實現了多個這樣的 介面,就可以達到類似多繼承的效果。
讓我們用代碼測試一下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test35
{
public interface ITestA{ }
public static class ITestAHelper
{
public static void TestA(this ITestA obj)
{
Console.WriteLine("ITestAHelper.TestA");
}
}
public interface ITestB{ }
public static class ITestBHelper
{
public static void TestB(this ITestB obj)
{
Console.WriteLine("ITestBHelper.TestB");
}
}
public class Test : ITestA, ITestB
{
}
class Program
{
static void Main(string[] args)
{
Test obj1 = new Test();
obj1.TestA();
obj1.TestB();
Console.ReadKey();
}
}
}
執行的結果:
ITestAHelper.TestA
ITestBHelper.TestB