我正在与基于网格的库存系统进行统一游戏,但我遇到了问题。我不知道如何处理库存中的不同类型的物品。
例如
我有一个班级Item
:
class Item
{
public int ID;
public string name;
}
然后我有武器类继承Item类
class Weapon: Item
{
public int damage;
}
和材料类
class Material : Item
{
public int hardness;
}
我的问题是如何将它们放在像List<Item> inventory
这样的列表中,并且仍然可以访问它们的所有属性。这是解决这个问题的好方法还是我需要一个完全不同的系统?
答案 0 :(得分:2)
您可以使用is
和as
C#运算符来查找对象并将其转换为派生类型。请参阅以下示例:
class Item
{
public int ID;
public string name;
}
class Weapon : Item
{
public int damage;
}
class Material : Item
{
public int hardness;
}
void Main()
{
List<Item> inventory = new List<Item>();
inventory.Add(new Weapon
{
name = "weapon",
ID = 1,
damage = 10,
});
inventory.Add(new Material
{
name = "material",
ID = 1,
hardness = 100,
});
foreach (var item in inventory)
{
if (item is Weapon)
{
var weapon = item as Weapon;
weapon.Dump();
}
if (item is Material)
{
var material = item as Material;
material.Dump();
}
}
}
您可以看到更多示例here。