【发布时间】:2017-02-15 06:13:35
【问题描述】:
注意:在将其标记为重复或关闭之前,请考虑阅读完整问题,您可能更愿意建议编辑而不是关闭它。
更新 是的,我知道 c# 不允许多重继承,但当然它实际上需要一些时间,如以下场景,所以请指导,为什么不需要它或如何实现它
我需要在一个孩子中继承/重用来自不同类的功能/成员。我有课
abstract class Hurdle
{
public virtual void setPositionInCells(){somecode_sp();}
public virtual void OnHit(){somecode_h();}
}
我真正需要的课程是MovableSingleCellHurdle、MovableMultiCellHurdle、StationarySingleCellHurdle 和StationaryMultiCellHurdle
但在 C# 中我只能这样做
class SingleCellHurdle: Hurdle
{
public int CellNumber;
public override void setPositionInCells(){ base(); somecode_sp1();}
}
class MultipleCellHurdle: Hurdle
{
public int[] CellNumbers;
public override void setPositionInCells(){ base(); somecode_sp2();}
}
class MovableHurdle: Hurdle
{
public float HitForce;
public override void OnHit() { base(); somecode_h1();}
}
class StationarHurdle: Hurdle
{
public override void OnHit() { base(); somecode_h2();}
}
但我坚持做以下事情
class MovableSingleCellHurdle: MovableHurdle, SingleCellHurdle
{
public override void OnHit() { base();}
public override void setPositionInCells() { base();}
public int getLastHitForce()
{
return HitForce;
}
public int getLastPositionCells()
{
return CellNumber;
}
}
我需要做的是,我不应该再为真实课程重复setPosition()和OnHit()的代码
我目前正在做的根本不是继承/重用,因为它不允许我制作上述所需的结构
我应该在几年前就知道了,可惜找不到专门针对这种继承场景的文章/博客。
如果您认为这个问题值得投反对票,那没关系,但也请指导我。如果我做错了,那么请指导我应该使用什么方法?或者哪篇文章完全解释了使用最佳 oop 实践处理这种情况
【问题讨论】:
-
首先,C# 不允许从多个类继承。那么您的
MovableSingleCellHurdle无效。此外,base()无效。你可能指的是base.baseMethod()。 -
您是否将组合视为继承的替代方案?
-
@FacticiusVir,我一定是因为在组合/继承的良好概念方面很差,所以你能指导一下我在哪里看起来像这样或者我应该如何看待它
-
我认为这里的主要问题是您的帖子不是一个问题。 这里的问题是什么?
-
@Sami 这是一个合理的介绍:codingdelight.com/tag/composition-over-inheritance
标签: c# oop inheritance multiple-inheritance reusability