使用继承实现接口(子类)

Mak*_*yNZ 1 php c# oop

我试图实现类似下面的类图的系统.
我想定义一个接口,一个实现部分接口的基类,以及实现接口其余部分的子类.
有没有办法可以做到这一点?我在C#中尝试了这个,但编译器抱怨基类没有完全实现接口.如果可能的话,我想要一个适用于C#和PHP的解决方案

在此输入图像描述

Jon*_*Jon 5

该解决方案适用于C#和PHP,它既可以创建基类,也可以创建未在其中实现的方法abstract.这是PHP版本:

interface IStep
{
    public function name();
    public function log();
    public function run();
    public function undo();
}

abstract class BaseStep implements IStep
{
    public function name() {}
    public function log() {}
    abstract public function run();
    abstract public function undo();
}
Run Code Online (Sandbox Code Playgroud)

特别是在PHP中,您还可以选择使用特征而不是基类.在这种情况下,这似乎不是一个好的设计,但它可以派上用场:

trait BaseStep
{
    public function name() {}
    public function log() {}
}

class StepOne implements IStep
{
    use BaseStep;

    public function run() {}
    public function undo() {}
}
Run Code Online (Sandbox Code Playgroud)