我需要一个玩家装备一个物品,如下所示:IEquiptable
是一个接口。
这个方法在我的player
类中。
public void equip(IEquiptable equipable)
{
switch (equipable.GetType())
{
case equipable is Weapons:
this.weapon = equipable;
break;
case equipable is Shield:
this.shield = equipable
break;
//etc etc..
}
}
我收到一个错误,指出开关运算必须是bool,char,string,integral,enum或相应的可为null的类型。
我可以通过在我的每个武器/盾牌类中使用一个equit方法并通过我的
player
类作为参数来处理它。但是我觉得这有点不合逻辑,因为玩家应该装备一个物品,而不是装备自己的物品。 最佳答案
您已经有一个接口,所以为什么不使用它呢?
public interface IEquipable
{
void EquipOn( Player player );
}
public class Shield : IEquipable
{
public void EquipOn( Player player )
{
player.shield = this;
}
}
public class Weapons : IEquipable
{
public void EquipOn( Player player )
{
player.weapon = this;
}
}
你的代码变成
public void equip(IEquiptable equipable)
{
equipable.EquipOn( this );
}
实际上,您甚至不需要此方法,因为它已简化为仅将其工作转发到适当的类。每当您拥有
IEquipable
时,您只需调用其EquipOn
方法。