我正在尝试使用类组合来规避无法从我的 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 派生类的名称完全相同,并且以我当前的方法,我将来可能以项目类型的方式添加的任何内容都将非常令人沮丧。