“我的程序有两个接口,并且都有一个具有相同名称的方法。那么,我们如何在继承两个接口的子类中实现它们呢?还有我们如何从子类中调用这两种方法?”
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");
}
}
实现两种接口方法是否正确?
答案 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
}
}