【发布时间】:2013-05-17 15:26:20
【问题描述】:
我正在创建一个具有 Inventory 对象的 Character 对象。在 Inventory 对象中,您有一个 InventoryItem 对象列表,在每个 InventoryItem 对象中,您都有一个 Item 对象。
字符
我的问题在于该项目。一个项目可以是多种类型。每种类型都有自己的属性。所以在我的数据库中,我得到了这些表:Item、WeaponItem、ArmorItem、UseableItem、TrashItem、QuestItem 和 AccesoryItem。每个项目类型表都有一个 ItemId 以将它们链接到项目。
我的问题是:如何为我的 Item 类实现不同类型的项目?
我的想法是为每种类型创建一个字段/属性,并将它们全部设置为 null,除了项目的当前类型。 (也可能添加一个表 ItemType 并将其添加到类 Field/Property)
我想到的另一件事是为每种类型创建一个类,并与上述相同,但使用对象本身。
这是一个好方法还是有更好的方法?
这是我当前的 Item 类代码:
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 来告诉使用哪个类? (使用开关盒)还是我弄错了?
对不起,如果问题很愚蠢,我有点慢。 :(
【问题讨论】:
-
你需要学习继承。
-
只是一个提示,以防你不知道:你可以声明这样的属性
public int ItemId { get; set; }。通过创建私有字段并在get和set运算符中访问它,它是一种与您的属性完全相同的速记。这样可以节省大量打字时间。 -
为什么有这么多物品表?它们有不同的属性吗?您没有在代码 sn-p 中显示它们。你能分享一下桌子的详细信息吗?
-
@emd 我的大脑现在完全烧毁了,我简直不敢相信我忘记了这一点。 D:对于 Wutz,我只需右键单击我的字段并封装。甚至更快。 :p
-
@Tombala ArmorItem 获得了 ArmorTypeId 属性,WeaponItem 获得了 WeaponTypeId,QuestItem 获得了 QuestId,AccesoryItem 和 Trash 还没有,但我将它们分开以备将来更改。
标签: c# sql-server database class object