C# 多级继承或接口的重复实现?

C# multilevel inheritance or duplicated implementation of interfaces?

从技术上看,多级继承的数量似乎没有限制。示例:class D 继承 class C 继承 class B 继承 class A。但是,随着您不断继承,它们的名称开始变得复杂。

在我看来,事实上,拥有基础 class 并使用接口会是更好的方法。

我遇到的问题是,对于接口,我必须在每个 class 中实现属性。使用基础 class,我只在一个地方实现它们。

在我的场景中,我有以下内容:

有 10-15 个 Animal 子 class,大约 7-8 个可以排名 and/or 可过滤。我不想在 7-8 classes 中的每一个中实现接口(在我看来太多的“重复”)。

一个选择是创建一个名为 AnimalRankeableByLevel 的基础 class 和另一个 AnimalRankeableByLevelAndFilterableByExpertise 特别是最后一个似乎太长而不正确!

有了接口,我不得不过多地“重复”实现。 继承太多 classes,它看起来不对(名称太长,继承太多)。

解决这个问题的方法是什么?

谢谢!

组合优于继承。在 7-8 classes 中实现接口本身不是问题。

如果您想减少接口实现的重复(因为例如某些值的计算是相似的),您可以将该计算提取到另一个 class 并将接口实现委托给那个 class.

示例:

public class SomeAnimal : IRankable
{
  private IRankingCalculator calculator = new RankingCalculator();

  public int Rank => calculator.GetRank();

  //...
}

public interface IRankable
{
   public int Rank {get;}
}