首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#多层继承还是接口的重复实现?

C#多层继承还是接口的重复实现?
EN

Stack Overflow用户
提问于 2020-08-06 15:13:48
回答 1查看 163关注 0票数 0

从技术上看,多级继承的数量是没有限制的。示例:类D继承C类,继承B类,继承A类,但是它们的名称随着继承时间的延长而变得复杂。

实际上,在我看来,拥有一个基类并使用接口是一种更好的方法。

我遇到的问题是,通过接口,我必须在每个类中实现这些属性。使用基类,我只在一个地方实现它们。

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

Animal

  • Interfaces:

  • 基类:RankeableByLevel (这有允许对动物进行排序的附加属性),FilterableByExpertise (这有允许过滤动物的附加属性)。

有10-15个Animal子类,大约7-8个子类是可分级和/或可过滤的。我不想在7-8类的每个类中实现接口(在我看来,“复制”太多了)。

一种选择是创建一个名为AnimalRankeableByLevel的基类,特别是创建另一个AnimalRankeableByLevelAndFilterableByExpertise --最后一个似乎太长了,不可能正确!

有了接口,我将不得不“复制”太多的实现。如果继承了太多的类,它就会看起来不对(名称太长,继承太多)。

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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-08 07:57:03

偏爱组合而不是继承。在7-8类中实现接口本身并不是一个问题。

如果希望减少接口实现的重复(例如,某些值的计算是相似的),则可以将该计算提取到另一个类,并将接口实现委托给该类。

示例:

代码语言:javascript
复制
public class SomeAnimal : IRankable
{
  private IRankingCalculator calculator = new RankingCalculator();

  public int Rank => calculator.GetRank();

  //...
}
代码语言:javascript
复制
public interface IRankable
{
   public int Rank {get;}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63286614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档