有一个抽象类实现接口的好处?

Xai*_*oft 4 .net oop inheritance abstract-class interface

我最近问过这个问题我是否应该实现接口或抽象类.斯科特给出了答案,建议我同时使用两者,但我仍然不确定为什么我会这样做.从长远来看是否有好处?这样做有什么好处?

我认为这有一些好处:

  • 我可以在不破坏实现的情况下为抽象类添加方法,但是使用接口,我会打破它.
  • 我可以从多个接口继承,但只能从一个抽象类继承
  • 抽象类允许我定义标准行为,但如果我愿意,可以覆盖它.

这是另一个问题.如果我实现了一个接口,那么接口是否只包含所有子类都可以做的方法?如果我需要额外的逻辑,我会创建一个具有更具体实现的具体类或抽象类.

Ian*_*son 6

这种方法为您提供了两全其美的优势 - 接口的灵活性和基类的有用选项.

通过要求只有消费者实现你的界面,你是不是迫使他们失去唯一继承槽开自己的类(C#不允许多重继承).

但是通过另外提供一个抽象基类,你可以给它们一个"支持",也许通过实现一些辅助功能,这可能是你的接口的大多数实现的常见要求 - 例如,这可以使用模板方法实现图案.

.NET Framework本身有几个示例,它们都是公开的接口和基类.例如System.ComponentModel.IComponentSystem.ComponentModel.Component

这是另一个问题.如果我实现了一个接口,那么接口是否只包含所有子类都可以做的方法?

是.您实际上是在描述接口隔离原则.