今天,我偶然发现一个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/

10-13 07:58