内部にメソッドBagがある がある状況にいます。AddSlot2 種類のバッグがItemsBagあり、DCBag(ドラッグ可能なコンテンツの略)
ItemsBagは行と列があることを意味する 2D バッグであり、DCBag1D であり、列は 1 つだけですが行は多数あります (つまり、2D と見なすこともできます)。
AddSlot問題は、最初のバッグが 2D インデックスを扱うため、署名を次のようにしたいということです。
public void AddSlot(int r, int c);
そして他のバッグのAddSlot:
public void AddSlot(int r);
上記の方法で署名をオーバーライドできるようにAddSlot、仮想/抽象署名を作成するにはどうすればよいですか?BagItemsBagDCBagBag
私が言ったように、DCBagも 2D であると見なすことができるので、 と の両方ItemsBagが同じ署名を持っていますが、これができるかどうかを本当に知りたいです。それは非常に興味深いことです。
可変数の引数を使用してparams obejct[] args回避できますが、ボックス化/ボックス化解除を伴わない方法で行うとよいでしょう。
また、 aTwoDimBagをOneDimBag作成して両方を から継承させBag、 の定義をAddSlot好きなように記述してから、 ItemsBaginheritTwoDimBagとDCBaginheritを作成することもできますが、現在OneDimBagの状態を達成する方法以上の回避策を探しているわけではありません。要求する。
もう一度要約すると、継承する子で上書きできる署名をどのように書くことができますか? (つまり、私ができるなら、方法がある)
ありがとう。
編集: (追加情報)Bagには多くの機能があります。2 つのバッグの違いは、スロット ( ) の 2 次元リストを保持ItemsBagするのに対して、 の 1 次元List<List<Slot>>を保持することです。を保持しているのはです。- の項目は複数の場合がありますが、 の項目は1 つのみです。DCBagListSlotSlotItemItemsBagSlotDCBag
両方のバッグでできることのいくつか: AddSlot, FreeSlot, AddItem(追加戦略が異なります。追加の追加方法もありますItemsBag)、両方のバッグで、マウスでアイテムをピックアップしたり、アイテムを交換したり、アイテムを並べ替えたりできます。両方のバッグも受け取ることができます次のような必要なアクションを実行するためのスロットからの通知Notify_ClickedOnEmptySlot(Slot slot)
でしかできないことのいくつかItemsBag: アイテムの結合、スロットの列の追加、スロットの列の追加、アイテムの回転。
バッグの外観の違いは次のとおりですItemsBag(これは古いデモです)。

DCBag:
