【发布时间】:2018-06-22 18:48:37
【问题描述】:
我知道沮丧可能不是实现我的愿望的最佳方式,但它至少表明了我脑海中闪过的那种解决方案。欢迎任何替代建议。
好的,那么不妨深入我的代码:
public void triggerItem(Item item)
{
if (item is Weapon) {
equipWeapon(item);
}
}
public void equipWeapon(Weapon weapon)
{
}
所以我基本上设置了一个库存,当然库存将包含各种类型的物品(武器、盔甲、消耗品等)。如您所见,我有一个 Item 类,然后是 Weapon 类和一堆其他所有继承项目的人。
现在,我打算在玩家点击库存中的物品时调用此函数,然后根据特定的物品类型调用不同的函数。
但是因为equipWeapon()收到了Weapon,所以它不喜欢我只是给它一个Item。
我知道我可以将我的代码更改为equipWeapon(Item item),但对象的最终目的地需要一个武器类型,我不愿意更改它。这似乎是一个肮脏的解决方案,并且是朝着错误方向迈出的一步,但如果我错了,请随时纠正我。
【问题讨论】:
-
这应该是您设计中的一个大 reg 标志。您需要对接口进行编码并进行泛化
-
将 equip 方法作为抽象方法移动到 Item 类
-
啊,当解决方案开始推出时,我以为我会觉得很傻。实际上,我今天早些时候从我的 Item 类中删除了equip() 方法,当时我被重组得意忘形了。我想有点脑残的时刻。非常感谢所有发帖的人。
标签: c# class unity3d parent-child downcast