从技术上看,多级继承的数量是没有限制的。示例:类D继承C类,继承B类,继承A类,但是它们的名称随着继承时间的延长而变得复杂。
实际上,在我看来,拥有一个基类并使用接口是一种更好的方法。
我遇到的问题是,通过接口,我必须在每个类中实现这些属性。使用基类,我只在一个地方实现它们。
在我的场景中,我有以下内容:
Animal
RankeableByLevel (这有允许对动物进行排序的附加属性),FilterableByExpertise (这有允许过滤动物的附加属性)。有10-15个Animal子类,大约7-8个子类是可分级和/或可过滤的。我不想在7-8类的每个类中实现接口(在我看来,“复制”太多了)。
一种选择是创建一个名为AnimalRankeableByLevel的基类,特别是创建另一个AnimalRankeableByLevelAndFilterableByExpertise --最后一个似乎太长了,不可能正确!
有了接口,我将不得不“复制”太多的实现。如果继承了太多的类,它就会看起来不对(名称太长,继承太多)。
解决这个问题的办法是什么?
谢谢!
发布于 2020-08-08 07:57:03
偏爱组合而不是继承。在7-8类中实现接口本身并不是一个问题。
如果希望减少接口实现的重复(例如,某些值的计算是相似的),则可以将该计算提取到另一个类,并将接口实现委托给该类。
示例:
public class SomeAnimal : IRankable
{
private IRankingCalculator calculator = new RankingCalculator();
public int Rank => calculator.GetRank();
//...
}public interface IRankable
{
public int Rank {get;}
}https://stackoverflow.com/questions/63286614
复制相似问题