Hit*_*ati 12 c# oop inheritance interface multiple-inheritance
我知道C#不支持多重继承,而且解决方案是使用接口.但我不明白的是为什么接口不像多继承那样创建钻石问题.如何使用接口避免多重继承的陷阱?
Bol*_*ock 23
一个类可以实现任意数量的接口,即使这些接口也扩展其他接口.只有类才能进行多重继承.
// 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() {}
}
Run Code Online (Sandbox Code Playgroud)
钻石问题存在于类中,因为存在冲突实现的可能性(如果A并且B具有相同的方法并C扩展两者,它采用哪种方法?).另一方面,接口只需要一个实现类型来获得它们声明的方法.
如果在两个接口中定义完全相同的方法,并且类实现两个接口,则无关紧要.所有类需要做的是为方法提供一个实现,以便可以编写代码来调用该方法.这意味着,这有效:
interface IA { void Method(int x); }
interface IB { void Method(int x); }
class A : IA, IB
{
public void Method(int x)
{
Console.WriteLine(x);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,类可能仍然从另一个类继承,加上任意数量的接口:
class A : B, IA, IB {}
Run Code Online (Sandbox Code Playgroud)