我的程序有两个接口,并且都有一个具有相同名称的方法。那么,我们如何在继承两个接口的子类中实现它们呢?

时间:2019-04-10 03:15:05

标签: c#

“我的程序有两个接口,并且都有一个具有相同名称的方法。那么,我们如何在继承两个接口的子类中实现它们呢?还有我们如何从子类中调用这两种方法?”

public interface A
{
    void Display();
}
public interface B
{
    void Display();
}

class Program: A, B
{
    void A.Display()
    {
        Console.WriteLine("Method of interface A");
    }
    void B.Display()
    {
        Console.WriteLine("Method of interface B");
    }
}

实现两种接口方法是否正确?

3 个答案:

答案 0 :(得分:2)

是的,您的操作方式正确。

使用接口时,会发生以下情况:一个类实现两个接口,并且两个接口都包含具有相同签名的成员。当类为接口成员提供定义时,由于它们都具有相同的名称,因此对于哪个成员获得定义感到困惑。在这种情况下,我们将使用显式接口实现。

请参见下面的经典示例。

using System;    

namespace InterfaceDemo    
{    
     //First Interface IDebitCard    
     interface IDebitCard    
     {     
       void CardNumber();    
     }    

     //Second Interface ICreditCard    
     interface ICreditCard    
     {    
       void CardNumber();    
     }    

     //Customer Class implements both the interfaces    
     class Customer: IDebitCard, ICreditCard    
     {   

       void IDebitCard.CardNumber()    
       {    
         Console.WriteLine("Debit Card Number: My Card Number is 12345XXXXX");    
       }    

       void ICreditCard.CardNumber()    
       {    
          Console.WriteLine("Credit Card Number: My Card Number is 98999XXXXX");    
       }    

       public void CardNumber()    
       {    
          Console.WriteLine("Customer ID Number: My ID Number is 54545XXXXX");    
       }    
     }    

     class Program    
     {    
       static void Main(string[] args)    
       {    
          Console.WriteLine("////////////////////- Implicit and Expliction Implementation -//////////////////// \n\n");    
          Customer customer = new Customer();    
          IDebitCard DebitCard = new Customer();    
          ICreditCard CreditCard = new Customer();    

          customer.CardNumber();    
          DebitCard.CardNumber();    
          CreditCard.CardNumber();    

          Console.ReadKey();    
       }    
     }    
} 

您可以在此处查看完整的文章:Link

答案 1 :(得分:0)

假设您需要2种不同的 interface 实现使用2种不同的 logic ,那么您将必须明确地投射 explicit < / em> 接口实现

 var program = new Program();
 ((A)program).Display();
 ((B)program).Display();

输出

Method of interface A
Method of interface B

这真的很有意义,编译器(或任何与此相关的人)可能知道您想要哪个,调用者必须通过强制转换进行选择

Explicit Interface Implementation (C# Programming Guide)

  

如果一个类实现了两个包含一个成员的接口,则该成员带有   相同的签名,然后在类上实现该成员将导致   这两个接口都使用该成员作为其实现。

     

如果两个接口成员执行的功能不同,   但是,这可能导致错误地实现其中一项或两项   接口。 可以实现接口成员   明确地-创建仅通过以下方式调用的类成员   界面,并且特定于该界面。这是通过完成   用接口名称和句点命名类成员。

答案 2 :(得分:-1)

您要达到什么目标?

您可以执行以下操作:

public interface A
{
  void Display();
}

public interface B : A
{
  void SomeOtherMethod();
}

class Program: B
{
  public void Display()
  {
    // implementation
  }

  public void SomeOtherMethod()
  {
    // implementation
  }
}