今天我发现一个C#类可以以隐式和显式的方式继承一个接口,这使我感到惊讶。如果C#以这种方式运行,那么一个实例在不同的引用方式下可能会表现出不同的行为。
interface IFoo
{
void DoSomething();
}
class Foo : IFoo
{
#region IFoo Members
public void DoSomething()
{
Console.WriteLine("do something implicitly");
}
#endregion
#region IFoo Members
void IFoo.DoSomething()
{
Console.WriteLine("do something explicitly");
}
#endregion
}
Foo f = new Foo();
f.DoSomething();
((IFoo)f).DoSomething();
以上代码运行并输出
do something implicitly
do something explicitly
我认为C#的这种设计导致了不一致的行为。也许强制要求一个C#类只能以隐式或显式的方式从一个接口继承,而不能同时继承。
C#被设计为这样的原因是什么?