如果類實現兩個接口,並且這兩個接口包含具有相同簽名的成員,那麼在類中實現該成員將導致兩個接口都使用該成員作爲它們的實現。例如:
然而,如果兩個接口成員執行不同的函數,那麼這可能會導致其中一個接口的實現不正確或兩個接口的實現都不正確。可以顯式地實現接口成員 -- 即創建一個僅通過該接口調用並且特定於該接口的類成員。這是使用接口名稱和一個句點命名該類成員來實現的。例如:
類成員 IControl.Paint 只能通過 IControl 接口使用,ISurface.Paint 只能通過 ISurface 使用。兩個方法實現都是分離的,都不可以直接在類中使用。例如:
//obj.Paint(); // Compiler error.
IControl c = (IControl)obj;
c.Paint(); // Calls IControl.Paint on SampleClass.
ISurface s = (ISurface)obj;
s.Paint(); // Calls ISurface.Paint on SampleClass.
顯式實現還用於解決兩個接口分別聲明具有相同名稱的不同成員(如屬性和方法)的情況:
{
int P { get;}
}
interface IRight
{
int P();
}
爲了同時實現兩個接口,類必須對屬性 P 和/或方法 P 使用顯式實現以避免編譯器錯誤。例如:
{
public int P() { return 0; }
int ILeft.P { get { return 0; } }
}