gpt4 book ai didi

.net - 接口(interface) + 扩展(mixin)与基类

转载 作者:行者123 更新时间:2023-12-03 09:20:38 24 4
gpt4 key购买 nike

接口(interface)+扩展方法(mixin)比抽象类更可取吗?

如果您的答案是“取决于”,它取决于什么?

我看到接口(interface)+扩展方法有两个可能的优势。

  • 接口(interface)是可多重继承的,而类则不是。
  • 您可以使用扩展方法以非破坏方式扩展接口(interface)。 (实现您的接口(interface)的客户端将获得您的新基本实现,但仍然能够覆盖它。)

  • 我还没有想到这种方法的缺点。接口(interface)+扩展方法失败的原因可能非常简单。

    关于这个主题的两篇有用的文章是
  • Create Mixins with Interfaces and Extension Methods
  • Abstract Base Classes Have Versioning Problems Too
  • 最佳答案

    扩展方法的缺点:C#3/VB9 之前的客户端将无法轻松使用它。

    就我而言,就是这样——我认为基于接口(interface)的方法要好得多。然后,您可以很好地模拟出您的依赖关系,并且所有内容基本上都没有那么紧密耦合。我不是类继承的忠实拥护者,除非它真的是关于特化的:)

    编辑:我刚刚想到了另一个可能相关的好处。一些具体的实现可能会提供一些通用方法的更优化版本。
    Enumerable.Count就是一个很好的例子——它显式检查序列是否实现 IList与否,因为如果它可以调用 Count在列表中,而不是遍历整个序列。如果 IEnumerable<T>曾经是一个带有虚拟 Count() 的抽象类方法,它可能已在 List<T> 中被覆盖而不是有一个知道 IList 的实现明确地。我并不是说这总是相关的,也不是IEnumerable<T>应该是一个抽象类(绝对不是!) - 只是指出它可能是一个小的缺点。这就是多态性真正适合的地方,通过专门化现有行为(诚然,以一种只影响性能而不是结果的方式)。

    关于.net - 接口(interface) + 扩展(mixin)与基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/783312/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com