在 C# 中,您没有多重继承。您可以通过使用composition来规避此限制。
像这样定义你的接口(Function
这里不需要定义):
public interface IMyInterface
{
void MyAction();
}
用一个抽象声明一个抽象类Function
并实现这个接口:
public abstract class MyInterfaceBase : IMyInterface
{
public void MyAction()
{
// Do stuff depending on the output of Function().
Function();
}
protected abstract void Function();
}
从这个抽象类中,您可以派生一个具体的实现。这还不是您的“最终”课程,但它将用于编写它。
public class ConcreteMyInterface : MyInterfaceBase
{
protected override void Function()
{
Console.WriteLine("hello");
}
}
现在让我们来看看你的“最终”组成的课程。它将源自SomeBaseClass
并IMyInterface
通过集成以下功能来实现ConcreteMyInterface
:
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");
}
}
}