微軟對這個問題的detailed write up,但它歸結爲多種接口/類已經在他們的相同方法實施。在此情況下,隱含不再起作用。
class Test
{
static void Main()
{
SampleClass sc = new SampleClass();
IControl ctrl = (IControl)sc;
ISurface srfc = (ISurface)sc;
// The following lines all call the same method.
sc.Paint();
ctrl.Paint();
srfc.Paint();
}
}
interface IControl
{
void Paint();
}
interface ISurface
{
void Paint();
}
class SampleClass : IControl, ISurface
{
// Both ISurface.Paint and IControl.Paint call this method.
public void Paint()
{
Console.WriteLine("Paint method in SampleClass");
}
}
// Output:
// Paint method in SampleClass
// Paint method in SampleClass
// Paint method in SampleClass
如果我們採取明確的方法,我們最終會得到這個結果。
public class SampleClass : IControl, ISurface
{
void IControl.Paint()
{
System.Console.WriteLine("IControl.Paint");
}
void ISurface.Paint()
{
System.Console.WriteLine("ISurface.Paint");
}
}
這一切歸結爲提供唯一性,當實施類型衝突。在你的例子中,Foo
是IFoo
。
你爲什麼這樣做呢?你實際上將'Foo'的用戶綁定到具體的實現上,使得單元測試的嘲弄變得困難,並且通常會增加應用程序中的耦合... –
這兩種方法幾乎是相互獨立的。兩者都有效,但有不同的目的。你不會在同一個具體類中爲同一個接口使用這兩種方法(至少不是我能想到的) – dkackman
@SteveCzetty因此OP的問題;明確實現接口是必要的。 –