gpt4 book ai didi

c# - 将对象转换为子类型? (沮丧)

转载 作者:太空宇宙 更新时间:2023-11-03 14:53:02 26 4
gpt4 key购买 nike

我知道沮丧可能不是实现我愿望的最佳方式,但它至少表明了我脑海中闪过的解决方案。欢迎任何替代建议。

好吧,不妨深入研究我的代码:

public void triggerItem(Item item) 
{
if (item is Weapon) {
equipWeapon(item);
}
}

public void equipWeapon(Weapon weapon)
{

}

所以我基本上设置了一个库存,当然库存将包含各种类型的元素(武器、盔甲、消耗品等)。如您所见,我有一个元素类,然后是一个武器类和一堆其他的都继承了 Item。

现在,我打算在玩家点击其库存中的元素时调用此函数,然后根据特定的元素类型调用不同的函数。

但是因为 equipWeapon() 接收到 Weapon,它不喜欢我只给它传递一个 Item。

我知道我可以将代码更改为 equipWeapon(Item item),但是对象的最终目的地需要武器类型,我不愿意更改它。这似乎是一个肮脏的解决方案,是朝着错误方向迈出的一步,但如果我错了,请随时纠正我。

最佳答案

为您的基类提供一个使其被装备的方法,并在知道如何装备自身的特定类型类中实现它。

例子:

abstract class Item
{
public abstract void Equip();
}

class Weapon
{
public override void Equip()
{
equipWeapon(this);
}
}

然后 triggerItem 变得微不足道:

public void triggerItem(Item item) 
{
item.Equip();
}

如果您需要在不同的类上调用 equipWeapon(例如,任何包含 triggerItem 的类),您可以将该类作为接口(interface)的一部分:

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);
}
}

关于c# - 将对象转换为子类型? (沮丧),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50994016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com