Inventory オブジェクトを持つ Character オブジェクトを作成しています。Inventory オブジェクトには InventoryItem オブジェクトのリストがあり、すべての InventoryItem オブジェクトには Item オブジェクトがあります。
キャラクター <= インベントリ <= 複数のインベントリ アイテム <= アイテム
私の問題はアイテムにあります。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 を使用して使用するクラスを指定する必要がありますか? (スイッチケースを使用)または私が間違っていましたか?
質問がばかげている場合は申し訳ありませんが、私は少し遅いです。:(