我正在为游戏设计一个非常简单的库存系统。我遇到了一个障碍,我有需要接受多种类型对象的库存(特定类型的数组)。我的代码:
IWeapon[] inventory = new IWeapon[5];
public void initialiseInventory(IWeapon weapon, IArmour armour)
{
inventory[0] = weapon; // Index 0 always contains the equipped weapon
inventory[1] = armour; // Index 1 always contains the equipped armour
}
我会收到一条错误消息,指出数组无法将盔甲对象转换为武器对象(这是数组类型)。然后我想我可能会创建一个超类(准确地说是接口),IWeapon 和 Iarmour 将从中继承。但后来我遇到了另一个错误......
IItem[] inventory = new IItem[5];
public void initialiseInventory(IWeapon weapon, IArmour armour)
{
inventory[0] = weapon; // Index 0 always contains the equipped weapon
inventory[1] = armour; // Index 1 always contains the equipped armour
Console.WriteLine("The weapon name is: " + inventory[0].Name) // Problem!
}
由于数组类型是 IItem,它只包含来自 IItem 的属性和方法,而不是来自 IWeapon 或 Iarmour。因此问题出现了,我无法访问位于子类(子接口)IWeapon 中的武器的名称。有没有办法以某种方式重定向它以在子接口(IWeapon 或 IArmour)而不是超接口(IItem)中查找属性?我是否走在正确的道路上?