分组课程

时间:2018-07-28 16:17:06

标签: c#

我有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<...>();
}

1 个答案:

答案 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; } }
}