C#不支持多重继承,但可以通过组合(composition)来规避此限制。
定义接口时,可以按如下方式定义(Function
不需要在此定义):
public interface IMyInterface
{
void MyAction();
}
声明一个抽象类,其中包含一个抽象的Function
并实现此接口:
声明一个抽象类,其中有一个抽象的函数
,并实现这个接口:
public abstract class MyInterfaceBase : IMyInterface
{
public void MyAction()
{
Function();
}
protected abstract void Function();
}
你可以从这个抽象类派生出具体的实现。这还不是你的“最终”类,但它将用于组成它。
public class ConcreteMyInterface : MyInterfaceBase
{
protected override void Function()
{
Console.WriteLine("hello");
}
}
现在让我们来到你的“final”组合类。它将从SomeBaseClass
派生,并通过集成ConcreteMyInterface
的功能来实现IMyInterface
:
public class SomeBaseClass
{
}
public class MyComposedClass : SomeBaseClass, IMyInterface
{
private readonly IMyInterface _myInterface = new ConcreteMyInterface();
public void MyAction()
{
_myInterface.MyAction();
}
}
更新
C#中可以声明局部类。这使得多重继承更加接近,因为您可以在组合类中派生所有内容。
public class MyComposedClass : SomeBaseClass, IMyInterface
{
private readonly IMyInterface _myInterface = new ConcreteMyInterface();
public void MyAction()
{
_myInterface.MyAction();
}
private class ConcreteMyInterface : MyInterfaceBase
{
protected override void Function()
{
Console.WriteLine("hello");
}
}
}