C# 多级继承或接口的重复实现?
C# multilevel inheritance or duplicated implementation of interfaces?
从技术上看,多级继承的数量似乎没有限制。示例:class D 继承 class C 继承 class B 继承 class A。但是,随着您不断继承,它们的名称开始变得复杂。
在我看来,事实上,拥有基础 class 并使用接口会是更好的方法。
我遇到的问题是,对于接口,我必须在每个 class 中实现属性。使用基础 class,我只在一个地方实现它们。
在我的场景中,我有以下内容:
- 基地Class:
Animal
- 接口:
RankeableByLevel
(它具有允许对动物进行排名的附加属性),FilterableByExpertise
(它具有允许过滤动物的附加属性)。
有 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;}
}
从技术上看,多级继承的数量似乎没有限制。示例:class D 继承 class C 继承 class B 继承 class A。但是,随着您不断继承,它们的名称开始变得复杂。
在我看来,事实上,拥有基础 class 并使用接口会是更好的方法。
我遇到的问题是,对于接口,我必须在每个 class 中实现属性。使用基础 class,我只在一个地方实现它们。
在我的场景中,我有以下内容:
- 基地Class:
Animal
- 接口:
RankeableByLevel
(它具有允许对动物进行排名的附加属性),FilterableByExpertise
(它具有允许过滤动物的附加属性)。
有 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;}
}