我正在重写一个应用程序的基础架构,我遇到了一个有趣的情况。
我正在编写一个类 Bag
:该类有一个属性 Items
,它可以保存 Item
的集合:
Weapon : Item
Armor : Item
Ammunition : Item
Bag : Item (because a player may want to put a bag inside of another one)
到这里一切都很好,问题是...
在前端,虽然对相同的 Armor
或 Weapon
的副本使用不同的用户控件是可以的,但是对于 Ammunition
(如箭头)或 Item
(如面包)。
一个玩家可以有 50 个箭头,这些箭头都需要表示为一个用户控件(堆栈)。最简单的方法是将 Quantity
属性添加到 Item
类,并将其从 Armor
、Weapon
中隐藏code> 和 Bag
类,但这似乎不对,不仅因为我必须对其他派生类隐藏它,而且最终,世界上的任何对象都可以存在数量不同,所以用这样的属性创建一个类似乎是不对的。
似乎正确的方法是为那些可以堆叠的项目收集 Item
(类似于 Stack(Of Item)
。所以,简而言之:我的 Bag
类不仅要能够容纳元素的集合,而且还要能够容纳元素的集合。
比如这是魔兽世界的截图:
如您所见,背包既可以容纳单个元素,也可以容纳成堆的元素。
我怎样才能以好的方式做到这一点?
最佳答案
我能想到几个解决方案
- 制定数量和最大数量 - 然后单数的项目的
MaxQuantity
为 1 - 制作一个
StackableItem
类,弹药等从中继承,然后您可以在其中包含一个数量,如果您愿意,它仍然允许您在不同的空间携带多个相同的项目。红色(臂章?)的屏幕截图中显示了一个示例
关于c# - 设计库存类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28209701/