接口IDerived從接口IBase中繼承,這時接口IDerived的成員方法覆蓋了父接口的成員方法。因為這時存在著同名的兩個接口成員,那麼對這兩個接口成員的實現如果不采用顯式接口成員執行體,編譯器將無法分辨接口映射。所以,如果某個類要實現接口IDerived,在類中必須至少聲明一個顯式接口成員執行體。采用下面這些寫法都是合理的:
//一、對兩個接口成員都采用顯式接口成員執行體來實現。
class C:IDerived { int IBase.P get{ ......//具體的接口實現代碼 } } int IDerived.p(){ ......//具體的接口實現代碼 } } //二、對Ibase的接口成員采用顯式接口成員執行體來實現 class C:IDerived { int IBase.p get{ ......//具體的接口實現代碼 } } public int p(){ ......//具體的接口實現代碼 } } //三、對IDerived的接口成員采用顯式接口成員執行體來實現 class C:IDerived { public int p get{ ......//具體的接口實現代碼 } } int IDerived.p(){ ......//具體的接口實現代碼 } }
另一種情況是,如果一個類實現了多個接口,這些接口又擁有同一個父接口,這個父接口只允許被實現一次。
using System; interface IControl { void Paint(); } interface ITextBox:IControl { void SetText(string text); } interface IlistBox:IControl { void SetItems(string[] items); } class ComboBox:IControl,ITextBox,IListBox { void IControl.Paint(){...} void ITextBox.SetText(string text){...} void IListBox.SetItems(string[] items){...} }
上面的例子中,類ComboBox實現了三個接口:Icontrol,ITextBox和IListBox。如果認為ComboBox不僅實現了IControl接口,而且在實現ITextBox和IListBox的同時,又分別實現了它們的父接口IControl。實際上,對接口ITextBox和IListBox的實現,分享了對接口IControl的實現。