接口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的實現。