今天,我偶然发现一个C#类可以以隐式和显式方式继承一个接口(interface)。这让我感到惊讶。如果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#类必须强制以隐式或显式方式从一个接口(interface)继承,而不能同时继承两者,这是强制性的。
为什么有这样的理由来设计C#?
最佳答案
您的示例不是隐式和显式地实现IFoo。您只能显式实现IFoo.DoSometing()。您的类上有一个名为DoSomething()的新方法。它与IFoo.DoSomething无关,只是它具有相同的名称和参数。
关于c# - 为什么C#类可以隐式地和显式地从一个接口(interface)继承?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/253058/