我有3个班级,分别是SmallStick,LongStick和OldShovel。
现在,我要在一个班级中列出这些班级。
这些是我的课程:
public class SmallStick : IItem
{
public string ItemName = "Small Stick";
public ItemType ItemType = ItemType.WEAPON;
}
public class LongStick : IItem
{
public string ItemName = "Long Stick";
public ItemType ItemType = ItemType.WEAPON;
}
public class OldShovel : IItem
{
public string ItemName = "Old Shovel";
public ItemType ItemType = ItemType.TOOL;
}
现在我想要一个这样的课程:
public class Inventory
{
List</*Class that represents every kind of these Items above*/> Items = new
List<...>();
}
答案 0 :(得分:7)
您可以创建类型为IItem
的列表。
List<IItem> Items = new List<IItem>();
...
Items.Add(new SmallStick());
Items.Add(new LongStick());
Items.Add(new OldShovel());
假定一个接口声明(在接口中,您可以声明属性,但不能声明字段。实际上,您只能声明方法,其中属性只是一对getter和setter方法)。
public interface IItem
{
string ItemName { get; }
ItemType ItemType { get; }
}
您可以访问实现界面的所有项目类型的这些属性
foreach (IItem item in Items) {
Console.WriteLine($"{item.ItemName} is a {item.ItemType}");
}
但是,由于这些是属性,因此必须这样声明类(C#6.0语法):
public class SmallStick : IItem
{
public string ItemName => "Small Stick";
public ItemType ItemType => ItemType.WEAPON;
}
这是
的简短语法public class SmallStick : IItem
{
public string ItemName { get { return "Small Stick"; } }
public ItemType ItemType { get { return ItemType.WEAPON; } }
}