注:完全な質問を読むことを検討する前に、それを閉じるよりも編集を提案する方がよいかもしれません。継承/再利用機能/複数の親からのプロパティ
更新はい、私はC#は多重継承を許可していません知っているが、オフコースのシナリオを次のように実質的に必要なそのいくつかの時間は、そう案内してください、どちらかそれは必要ではない理由や、それが達成できたか
ある子供の異なるクラスの機能/メンバーを継承/再利用する必要があります。私は私が必要とする実際のクラスはMovableSingleCellHurdle
、MovableMultiCellHurdle
、StationarySingleCellHurdle
とStationaryMultiCellHurdle
あるクラス
abstract class Hurdle
{
public virtual void setPositionInCells(){somecode_sp();}
public virtual void OnHit(){somecode_h();}
}
を持っていますが、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;
}
}
私がする必要があるのはなぜiが再び本当のクラスのsetPosition()
とOnHit()
のコードを複製する必要はないことを、ある
そのは私が私を加えることができないので、全く継承/再利用ではありません必要な構造の上に
私はこの数年前に学んだはずだったが、残念なことに、この継承のシナリオを特別に対象とする記事/ブログは見つかりませんでした。
この質問は投票に値すると思いますが、それでもOKですが、私にも案内してください。私がそれを完全に間違っているとすれば、私はどのようなアプローチをとるべきでしょうか?または、最高のoopの慣行を使用してこのシナリオを処理することについて完全に説明している記事
まず、C#では複数のクラスからの継承を許可していません。あなたの 'MovableSingleCellHurdle'は無効です。また、 'base()'は無効です。代わりに、おそらく 'base.baseMethod()'を意味するでしょう。 – haim770
継承の代わりに作曲を見ましたか? – FacticiusVir
@FacticiusVir、私はそのレベルで貧しい人々のために作っているに違いない。コンポジション/継承の良いコンセプト、あなたが私のように見えたか、どうすればいいのかを教えてください。 – Sami