C# 两个接口具有相同的方法

C# 两个接口具有相同的方法,c#,.net,C#,.net,代码运行良好,没有产生任何错误。 类D使用哪个接口的方法?两者都没有,因为两个接口都没有方法,只有方法签名。D中的方法实现了两个接口提供的签名,因此它可以工作 请记住,接口仅指定实现中必须存在的方法的签名。由于两个接口上的方法签名相同,并且类D实现了这些方法(使用单个函数),那么函数实现哪个接口并不重要,因此编译器很高兴 但是,通过将函数声明为 Interface A { int Add(int a,int b); } Interface B { int Add(int a,i

代码运行良好,没有产生任何错误。
类D使用哪个接口的方法?

两者都没有,因为两个接口都没有方法,只有方法签名。D中的方法实现了两个接口提供的签名,因此它可以工作


请记住,接口仅指定实现中必须存在的方法的签名。

由于两个接口上的方法签名相同,并且类D实现了这些方法(使用单个函数),那么函数实现哪个接口并不重要,因此编译器很高兴

但是,通过将函数声明为

Interface A
{
    int Add(int a,int b);
}

Interface B
{
    int Add(int a,int b);
}

Class D : A, B
{
    int Add(int a,int b)
    {
        return a+b;
    }
}
类D使用哪个接口的方法

都不是。接口没有方法,它们只定义实现应该具有的方法签名。你倒过来想的

  • D不使用A或B的方法
  • A在以D作为其实现的任何实例上使用D的方法
  • B在任何以D作为其实现的B实例上使用D的方法

D通过提供该方法来满足接口A和B。

两个接口都没有提供实现。类D使用自己的方法。接口与实现无关。不确定这个问题是否有意义。我认为问题应该是另一种方式——D类是否同时实现了这两个接口?答案是肯定的。你所要担心的是该方法的哪个实现正在被使用。这是明确的,只有一个。作为一个更新,您可以通过实现A.Add()和B.Add()并为两者提供不同的功能来实现您所拥有的接口。@Andrew true,但根据下面的CompuChip,这将需要指定您每次调用D.Add()时调用的方法。但是IIRC,您必须始终指定要调用的方法,即您不能执行
新建D()。添加(a,b)
,但必须编写
(新建D()为a)。添加(a,b)
(新建D()为b)。添加(a,b)
。更常见的是,您将隐式和显式实现一个接口,就像
Enumerable
Enumerable
@CompuChip Correct的情况一样,因为当您执行显式接口实现时,您(根据定义)必须明确您要调用的接口,这意味着您必须通过接口引用而不是类引用来调用。也就是说,如果您想要显式实现(如果不需要,您不必这样做)。。。
class D : A, B
{
    int A.Add(int a, int b)
    {
    }

    int B.Add(int a, int b)
    {
    }
}