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