1

我正在尝试使用类组合来规避无法从我的 DB-first 生成的名为“Item”的类继承的问题。命名空间征服{使用系统;使用 System.Collections.Generic;

public partial class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Movement { get; set; }
    public Conquest.Players.Items.ItemType Type { get; set; }
    public int VaultId { get; set; }

    public virtual Vault Vault { get; set; }
}
}

因此,不是通过从 Item 基类继承来创建 Item 类,即BagOfHolding : Item我已经对这些子类进行了重新设计,使其具有一个BagOfHolding : ItemLogic ,然后使用 ItemLogic 属性扩展生成的部分 Item 类。

public partial class Item
{
    private ItemLogic Logic { get; set; }

    public Item(ItemType type)
    {
        switch (type)
        {
            case ItemType.AnimalAmulet:
                Logic = new AnimalAmulet();
                break;
            case ItemType.AxeOfDespair:
                Logic = new AxeOfDespair();
                break;
            case ItemType.BagOfHolding:
                Logic = new BagOfHolding();
                break;
            case ItemType.BagOfTricks:
                Logic = new BagOfTricks;
                break;
            case ItemType.BuildersTools:
                Logic = new BuildersTools();
                break;


        }
        this.Name = Logic.Name;
        this.Movement = Logic.Movement;
        this.Type = Logic.Type;
    }

正如你所看到的,我的构造函数使用了一个甚至不完整的 switch 语句,只是感觉很脏而且非常多余,所以我的问题是:有没有更清洁的方法来做到这一点?我的 ItemType 枚举值名称与它们所代表的 ItemLogic 派生类的名称完全相同,并且以我当前的方法,我将来可能以项目类型的方式添加的任何内容都将非常令人沮丧。

4

0 回答 0