我知道 C# 不支持多重继承,解决方案是使用接口(interface)代替。但我不明白的是,为什么接口(interface)不会像多重继承那样产生菱形问题。使用接口(interface)如何避免多重继承的陷阱?
最佳答案
一个类可以实现任意数量的接口(interface),即使这些接口(interface)也扩展了其他接口(interface)。多重继承仅对类是不可能的。
// This is not allowed
class A { void A() {} }
class B { void B() {} }
class C : A, B {}
// This is allowed
interface IA { void A(); }
interface IB { void B(); }
class A : IA, IB
{
public void A() {}
public void B() {}
}
菱形继承(钻石问题)存在于类中,因为存在实现冲突的可能性(如果 A
和 B
具有相同的方法并且 C
扩展两者,它采用哪种方法?)。另一方面,接口(interface)只需要一个实现类型来拥有它们声明的方法。
如果在两个接口(interface)中定义了完全相同的方法,并且一个类实现了这两个接口(interface),那没有关系。该类需要做的就是为该方法提供一个实现,以便可以编写代码来调用该方法。意思是,这有效:
interface IA { void Method(int x); }
interface IB { void Method(int x); }
class A : IA, IB
{
public void Method(int x)
{
Console.WriteLine(x);
}
}
请注意,一个类仍然可以继承自另一个类,加上任意数量的接口(interface):
class A : B, IA, IB {}
关于c# - 使用接口(interface)如何克服C#中的多重继承问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5164582/