【问题标题】:Why use interface and abstract over just abstract?为什么要使用接口和抽象而不是抽象?
【发布时间】:2020-07-06 02:02:28
【问题描述】:

我正在网上阅读一些代码,其中有人实现了以下类:IMapObj 是一个普通接口,AbstractMapObj 派生自该接口,还有许多地图对象派生自 AbstrsctMapObj

在他的所有代码中,他指的是IMapObj,而不是AbstractMapObj

使用接口抽象类而不只是抽象类有什么好处?不用说没有其他类派生自IMapObj,只有AbstractMapObj

【问题讨论】:

  • 因为没有多重继承?
  • @UweKeim 代码无论如何都不包含多重继承。此外,IMapObj 中包含的属性可以放入 AbstractMapObj,因为这是唯一使用它们的地方。
  • 在这种特殊情况下,听起来可能没有意义
  • "... 派生自那个接口" 第一个错误的转折。它实现接口。但我赞同 Jamie:在所描述的结构中,它有点过于流畅了。
  • 可能这是在您将实现放入接口之前,这就是为什么有一个抽象类(包括通用实现)。至于为什么会有一个接口,因为接口定义了一个精确的 API 并允许解耦而不是让东西依赖于抽象类。

标签: c# interface abstract-class derived-class


【解决方案1】:

两者都使用的原因只有一个,那就是抽象类可以提供一些所有功能的默认实现。该界面可以轻松模拟以进行测试。

【讨论】:

  • Weeeelll,我还可以想象两个(或 n 个)完全分离的继承树实现相同的接口...理论上
  • *disjoint ^^ 不是“disjunct”(对不起,英语是我的第二语言)
【解决方案2】:

使用接口和抽象类而不只是抽象类有什么好处?

在发布的示例中,似乎没有真正的理由使用抽象类。在其他情况下,抽象类可以为接口实现的子集提供公共基础。该接口为应用程序/库的其余部分提供更稳定/通用的抽象。


一般只会使用抽象类来共享一个通用实现,而不是作为接口定义——但这只是我的偏好。人们使用许多不同的样式和模式。

【讨论】:

    猜你喜欢
    • 2013-09-21
    • 2012-08-20
    • 2012-04-24
    • 2014-07-23
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多