当前位置: 首页 > 知识库问答 >
问题:

一个接口-两个具有相同名称和签名的方法

朱翔
2023-03-14

我有一个采访问题-C#,是否可以在一个类中实现,从接口继承有两个具有相同名称和相同签名的方法?

共有3个答案

蒋俊
2023-03-14

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

不,实现一个接口是不可能的。

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

是的,汤姆的答案是展示如何。

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

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() { }
}

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

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

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

但是,如果类必须在interface1的方法上有一个行为,而在interface2的方法上有不同的行为,那么这种实现方法将不起作用。在这种情况下,你必须同意汤姆的回答

燕和裕
2023-03-14

如果我正确理解你的问题,是的,一个类将满足两个具有相同方法签名的独立接口。

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

    interface ITest1
    {
        void Test();
    }

    interface ITest2
    {
        void Test();
    }

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

        void ITest2.Test()
        {
            
        }
    }

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

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

ITest1 test = new TestImpl();
test.Test();
孟均
2023-03-14

不使用相同的接口。如果您有两个具有相同签名的方法的接口,那么一个类实现将实现这两个接口。

 类似资料:
  • 问题内容: 我有两个Java接口和一个实现类。 (我已经使用Eclipse直接运行程序,并且我没有尝试通过从命令行进行显式编译来检查任何编译器警告等)。 为什么它们运行没有问题?为什么Java允许这样做,即使它满足两个接口的“合同”,却在实现类时造成歧义? 更新了示例。 问题答案: Java语言规范的第8.1.5节专门允许这种情况: 类中的单个方法声明可以实现多个超级接口的方法。例如,在代码中:

  • 问题内容: 我的课叫做: 而该类称为: 最后是该班的测试班 该测试仅编译并运行Eclipse中的文件。 在通用线路上构建时 出现编译错误: 当我将行更改为以下内容之一时,编译也会失败 当我将行更改为 编译成功。 我无法理解为什么会出现这种编译错误。 我遇到了follwong链接装箱和拆箱,多个泛型类型和交集类型以及此eclipse编译器错误,但我仍然与所提到的原因无关。 我的问题是,当映射器传递给

  • 问题内容: 假设我有两个接口: 如果我想同时实现它们,那么将使用哪种实现? 问题答案: 这是一个编译时错误。您不能从两个接口获得两个实现。 但是,如果在中实现该方法,则是正确的: 我只想补充一点,即使I1中的方法是抽象的,而I2中的方法是默认的,您也无法实现它们两者。因此,这也是一个编译时错误:

  • 问题内容: 我正在尝试使用RSA 7.5和Websphere 7服务器开发IBM JAX_WS Web服务。因为我是一个初学者,所以我遵循Java类优先方法,即首先创建Java类,然后生成WSDL文件。 当我尝试创建wsdl文件时,出现异常: java.security.PrivilegedActionException:com.sun.xml.internal.bind.v2.runtime.I

  • 问题内容: 我正在用C#编写.NET Framework 3.5。 我正在尝试将某些Json解析为JObject。 Json如下: 当我尝试将此Json解析为JObject时,JObject仅了解LargeBox。SmallBox和MedBox的信息丢失。显然,这是因为它将“ TBox”解释为一个属性,并且该属性已被覆盖。 我从Delphi编码的服务中收到此Json。我正在尝试为该服务创建C#代理

  • 我改变了切入点的顺序,它总是排在第二位。关于如何解决这个问题有什么想法吗? 更新 一旦我发布了这个问题,我就有了一个想法。我这样更改了切入点: 现在异常消失了,但仍然有一个小问题(我想这个问题更容易解决):因为ArrayList实现了可序列化,所以至少在我使用ArrayList的测试用例中,两个切入点都被执行了。 我将对此进行研究,并发布我的发现,但也感谢您的帮助;) 我将代码改为只使用一个切入点