为什么抽象类实现接口?

use*_*098 4 c# oop

我看到抽象类实现接口的代码?为什么要这么做?我们可以直接将它们放在接口中,而不是将抽象成员放在接口中吗?

为什么会写这样的代码?目的或需求是什么?

Bra*_*NET 6

接口只是与其他代码的契约.另一方面,抽象类可以更多.他们能:

  • 有数据成员(字段)
  • 有实际的代码实现
  • 从另一个基类派生
  • 有受保护的成员

在模板方法模式中可以找到一个用例的一个很好的例子.你可以有一个命令的接口:

public interface IMyCommand
{
    void Execute();
}
Run Code Online (Sandbox Code Playgroud)

并且您有一组遵循特定顺序的命令.要强制执行此操作,您可以从抽象基类派生它们:

public abstract class MyTemplateClass : IMyCommand
{
    public void Execute()
    {
         MyProcessFirst();
         MyProcessSecond();
    }

    protected abstract void MyProcessFirst();
    protected abstract void MyProcessSecond();
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用模板方法后面的对象派生自抽象基类,而其他对象只需实现该接口.