C#不支持類的多繼承,然而卻可以繼承多個接口。簡單的就不說了,來看看下面的例子:
public interface IRead { string GetText(); } public interface IWrite { string GetText(); }
對於上面的這種情況,如果一個類同時繼承上面兩個接口,那麼如何去實現這兩個名字相同的方法呢?
顯示接口方法(EIMI)
public class MyCpu:IRead,IWrite { string IRead.GetText() { return "這個方法實現IRead的方法"; } string IWrite.GetText() { return "這個方法實現IWrite的方法"; } public string GetText() { return "這個方法實現自己獨有的方法"; } }
如上圖,只需要在方法前面加上接口名即可。然而顯示接口方法只能是私有方法。
然而這種方法要慎用,因為使用了這種方法後,值類型的實例在轉換成接口時會發生裝箱。因為是私有的,所以也不能被派生類調用。
最重要的是顯示接口方法的調用很奇葩:
var cpu = new MyCpu(); Console.WriteLine(cpu.GetText()); Console.WriteLine(((IRead)cpu).GetText()); IWrite b = cpu; Console.WriteLine(b.GetText()); Console.ReadLine();
必須先轉一道再調用,會讓使用的人很困惑。
用基類還是用接口
然而我認為實際上僅僅用第一個來判斷就好了,因為它更偏向於基於實際業務去考慮到底用基類還是接口。