【问题标题】:an Interface -two method with same name and Signature一个接口 - 具有相同名称和签名的两个方法
【发布时间】:2018-11-04 08:04:02
【问题描述】:

我有一个面试题-C#,是否可以在一个类中实现,从一个接口继承有两个同名同签名的方法?

【问题讨论】:

  • 输入它,让我们知道它是怎么回事......
  • 任何可以通过阅读文档或花几分钟自己测试来回答的问题都不应在这里提出。这个网站是为你自己不能锻炼的东西准备的,而不是你懒得去锻炼的东西。
  • 我没看懂问题,为什么界面相关?
  • 公共接口 ITest { void 方法(int i, int j);无效方法(int i,int j); } 类 TestImp : ITest { }

标签: c#


【解决方案1】:

不是同一个界面。如果您有 2 个具有相同签名的方法的接口,则一个类实现将满足两者。

【讨论】:

  • 谢谢你,丹尼尔
【解决方案2】:

如果我正确理解您的问题,是的,一个类将实现 2 个具有相同方法签名的独立接口。

但是,您也可以为每个接口提供不同的实现。这可以称为“显式接口实现”。比如……

    interface ITest1
    {
        void Test();
    }

    interface ITest2
    {
        void Test();
    }

    public class TestImpl : ITest1, ITest2
    {
        void ITest1.Test()
        {
            
        }

        void ITest2.Test()
        {
            
        }
    }

当使用显式接口实现时,不能从具体类型调用方法,即new TestImpl().Test()。只有当您有特定于接口的引用时,才能调用特定于每个接口的实现。例如。

(new TestImpl() as ITest1).Test();
(new TestImpl() as ITest2).Test();

或者……

ITest1 test = new TestImpl();
test.Test();

【讨论】:

  • “但实现必须是私有的”是什么意思?它们是公开的。
  • @DavidKlempfner 是的,你是对的!我指的是这样一个事实,即在使用具体类型时以这种方式使用显式接口实现“隐藏”方法。你是对的,我没有在技术上是正确的。我已经修改了答案以澄清。
【解决方案3】:

是否可以在一个类中实现,从一个接口继承有两个同名同签名的方法?

不,你不能实现一个接口。

是否可以在一个类中实现,继承自接口有两个同名同签名的方法?

是的,Tom 的回答显示了如何做。

但是当两个接口需要你的类实现一个具有相同名称和签名的方法时,你也可以这样做。

interface ILandAnimal
{
    void ToWalk();
    void ToBreed();
}
interface IWaterAnimal
{
    void ToSwim();
    void ToBreed();
}

public class Amphibians : ILandAnimal, IWaterAnimal
{
    //only one implementation of ToBreed ()
    //  (which is there in both interface)
    public void ToBreed() { }
    public void ToWalk() { }
    public void ToSwim() { }
}

在大多数情况下,两个接口有两个方法并不重要(也没有多大意义),因为两个接口都与类签约以实现一个这样的方法与接口包含的名称和签名相同。

并且只实现一个方法满足两个接口的这个约定。

例如:在上面的代码中,陆地动物和水动物的接口都要求它们的继承者具有繁殖功能。而Amphibians 类确实继承了它们,因为它必须具有陆地和水生动物的所有功能。它仍然只有一种方式(实施)来繁殖。所以不需要制定两种育种方法。

但是如果您的类必须在 interface1 的方法上具有一种行为而在 interface2 的方法上具有不同的行为,则这种实现方法将不起作用。在这种情况下,您必须选择汤姆的答案

【讨论】:

    猜你喜欢
    • 2011-07-26
    • 2022-01-22
    • 2015-11-02
    • 2015-03-11
    • 2015-10-19
    • 2017-01-19
    • 2011-11-23
    • 2011-12-13
    • 2011-01-23
    相关资源
    最近更新 更多