Я разрабатываю очень простую систему инвентаря для игры. Я столкнулся с препятствием, когда у меня есть инвентарь (массив определенного типа), который должен был бы принимать несколько типов объектов. Мой код:Как добавить несколько объектов в один массив?
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)? Я даже на правильном пути?
Iweapon и IArmor нужно будет извлечь из IItem для того, чтобы ваш второй пример, чтобы работать , –
Вы можете использовать «Generic List». Это позволит вам хранить всю информацию, связанную с объектом. – Greg
[[Этот вопрос] (http: // stackoverflow.com/questions/14562047/generic-type-parameter-covariance-and-multiple-interface-implementation)] может дать вам некоторое вдохновение для определения ваших интерфейсов. –