我正在创建一个具有 Inventory 对象的 Character 对象。在 Inventory 对象中,您有一个 InventoryItem 对象列表,在每个 InventoryItem 对象中,您都有一个 Item 对象。
字符 <= 库存 <= 多个库存项目 <= 项目
我的问题是项目。一个项目可以是多种类型。每种类型都有自己的属性。所以在我的数据库中,我得到了这些表:Item、WeaponItem、ArmorItem、UseableItem、TrashItem、QuestItem 和 AccesoryItem。每个项目类型表都有一个 ItemId 以将它们链接到项目。
我的问题是:如何为我的 Item 类实现不同类型的项目?
我想到的是为每种类型创建一个字段/属性,并将它们全部设置为 null,除了项目的当前类型。(也可能添加一个表 ItemType 并将其添加到类 Field/Property)
我想到的另一件事是为每种类型创建一个类,并与上述相同,但使用对象本身。
那会是做这件事的好方法还是有更好的方法?
这是我当前的项目类代码:
public class Item
    {
        #region Fields
        //=======================================================================================
        private int itemId;
        private string itemName;
        private int itemLevel;
        private int itemRarityId;
        private int equipementSlotId;
        private int statsId;
        private Stats stats;
        private string imageUrl;
        private int equipementSlotSecondId;
        private int itemWeight;
        //=======================================================================================
        #endregion
        #region Properties
        //=======================================================================================
        public int ItemId
        {
            get
            {
                return itemId;
            }
            set
            {
                itemId = value;
            }
        }
        public string ItemName
        {
            get
            {
                return itemName;
            }
            set
            {
                itemName = value;
            }
        }
        public int ItemLevel
        {
            get
            {
                return itemLevel;
            }
            set
            {
                itemLevel = value;
            }
        }
        public int ItemRarityId
        {
            get
            {
                return itemRarityId;
            }
            set
            {
                itemRarityId = value;
            }
        }
        public int EquipementSlotId
        {
            get
            {
                return equipementSlotId;
            }
            set
            {
                equipementSlotId = value;
            }
        }
        public int StatsId
        {
            get
            {
                return statsId;
            }
            set
            {
                statsId = value;
            }
        }
        public Stats Stats
        {
            get
            {
                return stats;
            }
            set
            {
                stats = value;
            }
        }
        public string ImageUrl
        {
            get
            {
                return imageUrl;
            }
            set
            {
                imageUrl = value;
            }
        }
        public int EquipementSlotSecondId
        {
            get
            {
                return equipementSlotSecondId;
            }
            set
            {
                equipementSlotSecondId = value;
            }
        }
        public int ItemWeight
        {
            get
            {
                return itemWeight;
            }
            set
            {
                itemWeight = value;
            }
        }
        #endregion
        #region Methods
        //=======================================================================================
        #endregion
        #region Constructors
        //=======================================================================================
        public Item()
        {
        }
        public Item(int pItemId)
        {
            ItemId = pItemId;
        }
        //=======================================================================================
        #endregion
如果需要,我可以添加任何其他信息。
编辑:继承。忘记这件事我是愚蠢的。
所以我为继承我的项目类的每种类型创建类。然后我的问题现在变成了:
当我使用它的 inventoryItem 项目列表创建我的角色库存时。要告诉使用哪个项目类型类,我是否必须在我的数据库中为我的项目创建一个 itemType 属性,或者为每个 itemType 创建一个 ItemType 表,然后将它与一个 id 链接,然后使用这个 itemType/itemTypeId 来告诉使用哪个类?(使用开关盒)还是我弄错了?
对不起,如果问题很愚蠢,我有点慢。:(