我对我写的代码有一些疑问,我希望你能够帮助我或帮助我找到更好的解决方案。
我有一个Player类,其中包含一些Slot类型的成员。每个Slot(下面的代码)都包含一个Equippable,它是由Armor,Weapon,Shield,MagicItem等特定类实现的接口。我需要这样做,因为我不想为每种类型的可装备物品写一个Slot类。
class Slot{
private Equippable item;
public Equippable Item = > item;
// here is constructor with default null item
// here are some methods to occupy/free slot
}
现在让我们回到Player类,其中我有一些插槽:weaponSlot,armorSlot等。在这里,我需要检索有关这些项目的信息;例如,我需要检索护甲加值。我需要做这样的事情:
int armorBonus = armorSlot.Item.Bonus;
显然这不会起作用,因为Slot类型中的Item只是一个Equippable而且不一定具有Bonus属性。所以我提出了两个解决方案:
以下是代码:
Armor armor = (Armor)armorSlot.Item;
int armorBonus = armor.Bonus;
扰乱我在这里是因为我应该小心为每个插槽提供正确的项目类型(我不知道直到运行时异常),因为插槽没有&# 39;不知道它允许包含什么类型的可装备。
好吧,我在写作时提出了另一个想法,所以我会把它放在这里:
您对如何改善这一点有任何想法吗?
答案 0 :(得分:2)
您可以将Slot
定义为通用类。
class Slot<T> where T : Equippable {
// ...
}
然后,您可以根据所需的特定插槽类型在Player上定义某些类型的插槽。例如:
class Player {
Slot<Armor> ArmorSlot { get; set; }
Slot<Weapon> WeaponSlot { get; set; }
}
这样做的好处是你不需要写一个&#34;单独的&#34;每个Equippable
的插槽类,但您可以强制执行每个插槽可以使用的特定类型的设备。