c# - 设计库存类

标签 c# vb.net oop collections

我正在重写一个应用程序的基础架构,我遇到了一个有趣的情况。

我正在编写一个类 Bag:该类有一个属性 Items,它可以保存 Item 的集合:

Weapon : Item
Armor : Item
Ammunition : Item
Bag : Item  (because a player may want to put a bag inside of another one)

到这里一切都很好,问题是...

在前端,虽然对相同的 ArmorWeapon 的副本使用不同的用户控件是可以的,但是对于 Ammunition(如箭头)或 Item(如面包)。

一个玩家可以有 50 个箭头,这些箭头都需要表示为一个用户控件(堆栈)。最简单的方法是将 Quantity 属性添加到 Item 类,并将其从 ArmorWeapon 中隐藏code> 和 Bag 类,但这似乎不对,不仅因为我必须对其他派生类隐藏它,而且最终,世界上的任何对象都可以存在数量不同,所以用这样的属性创建一个类似乎是不对的。

似乎正确的方法是为那些可以堆叠的项目收集 Item(类似于 Stack(Of Item)。所以,简而言之:我的 Bag 类不仅要能够容纳元素的集合,而且还要能够容纳元素的集合。

比如这是魔兽世界的截图:

如您所见,背包既可以容纳单个元素,也可以容纳成堆的元素。

我怎样才能以好的方式做到这一点?

最佳答案

我能想到几个解决方案

  1. 制定数量和最大数量 - 然后单数的项目的 MaxQuantity 为 1
  2. 制作一个 StackableItem 类,弹药等从中继承,然后您可以在其中包含一个数量,如果您愿意,它仍然允许您在不同的空间携带多个相同的项目。红色(臂章?)的屏幕截图中显示了一个示例

关于c# - 设计库存类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28209701/

相关文章:

java - 抽象类中的公共(public)字段?

c# - 通话被被叫方拒绝。 (来自 HRESULT : 0x80010001 (RPC_E_CALL_REJECTED)) 的异常

c# - Visual C# - 将文本框的内容写入 .txt 文件

c# - 在构建到 UWP 和 Il2CPP 之后,通用方法中的 AOT(提前)出现问题

Vb.net sendkeys,字母重复吗?

vb.net - 如何从另一个数组字符串中随机获取数组?

c++ - 是否可以使用指向未实例化对象的指针作为 C++ 中的变量?

c# - 使用 SqlBulkCopy 时跳过现有记录

.net - VB.NET:如何防止用户在组合框中输入

c++ - 如何设计:矩阵的线性代数例程