为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
鸿蒙传说 2021-06-30 02:17:30
我有一个面试题-C#,是否可以在一个类中实现,从一个接口继承有两个同名同签名的方法?
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

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


查看完整回答
反对 回复 2021-07-03
?
catspeake

TA贡献1111条经验 获得超0个赞

如果我正确理解您的问题,是的,单个类将实现 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();


查看完整回答
反对 回复 2021-07-03
?
阿晨1998

TA贡献2037条经验 获得超6个赞

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


不,实现一个接口是不行的。


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


是的,汤姆的回答显示了如何。


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


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

}

在大多数情况下,为两个接口使用两个方法确实无关紧要(也没有多大意义),因为这两个接口都与类签约以实现一个与接口包含的名称和签名相同的方法.


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


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


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


查看完整回答
反对 回复 2021-07-03
  • 3 回答
  • 0 关注
  • 211 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信