我知道,垂头丧气可能不是实现我的愿望的最佳方法,但这至少表明我心中有种种解决方案。欢迎任何其他建议。
好的,也可以深入研究我的代码:
public void triggerItem(Item item)
{
if (item is Weapon) {
equipWeapon(item);
}
}
public void equipWeapon(Weapon weapon)
{
}
所以我基本上建立了一个清单,清单当然会包含各种物品(武器,盔甲,消耗品等)。如您所见,我有一个Item类,然后是一个Weapon类和一堆物品其他都继承Item的人。
现在,我打算在玩家单击其库存中的某个物品时调用此功能,然后根据物品的特定类型调用不同的功能。
但是因为equipWeapon()
收到了武器,所以当我只将物品传递给它时,它就不喜欢它。
我知道我可以将代码更改为equipWeapon(Item item)
,但是对象的最终目的地需要Weapon类型,因此我不愿意更改它。这似乎是一个肮脏的解决方案,朝着错误的方向迈出了一步,但如果我做错了,请随时纠正我。
答案 0 :(得分:2)
给基类一个方法,使其能够被装备,并在知道如何装备自己的类型特定的类中实现它。
示例:
abstract class Item
{
public abstract void Equip();
}
class Weapon
{
public override void Equip()
{
equipWeapon(this);
}
}
然后triggerItem变得微不足道:
public void triggerItem(Item item)
{
item.Equip();
}
如果您需要在其他类(例如,包含triggerItem
的任何类)上调用equipWeapon,则可以使该类成为接口的一部分:
abstract class Item
{
public abstract void Equip(Game context);
}
class Weapon
{
public override void Equip(Game context)
{
context.equipWeapon(this);
}
}
class Game
{
public void triggerItem(Item item)
{
item.Equip(this);
}
}
答案 1 :(得分:-2)
这解决了。
public void triggerItem(Item item)
{
if (item is Weapon) {
equipWeapon((Weapon)item);
}
}
public void equipWeapon(Weapon weapon)
{
}
您在这里所做的是将Item
下传到Weapon
,同时传递到equipWeapon(Weapon weapon)
。