ゲーム用の非常に単純な在庫システムを設計しています。複数のタイプのオブジェクトを受け入れる必要があるインベントリ (特定のタイプの配列) があるという障害に遭遇しました。私のコード:
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 であるため、IWeapon または IArmour からではなく、IItem からのプロパティとメソッドのみが含まれます。したがって、サブクラス (サブインターフェース) IWeapon にある武器の名前にアクセスできないという問題が発生しました。スーパーインターフェイス (IItem) ではなく、サブインターフェイス (IWeapon または IArmour) でプロパティを探すようにリダイレクトする方法はありますか? 私は正しい道を進んでいますか?