我在C#中制作控制台游戏,并遇到了OOP范例的问题。
我有一个Item类:
class Item
{
public int SellPrice;
public string Name;
}
还有一个ShopItem类,它表示可以在商店购买的Item对象:
class ShopItem : Item
{
public int Price;
}
最后,武器类:
class Weapon
{
public int Attack, Durability;
}
现在,每个Weapon对象都是一个Item(此处的继承是故意删除的),但这会产生一个主要问题。
虽然你可以在商店购买一些武器,但你只能通过完成任务来获得其他武器。
因此,武器有时候是ShopItem(因为它可以在商店购买),有时它只是一个物品(不能在商店购买)。
有些商品有时可以在商店购买,如果它们是ShopItem(因为ShopItem继承自Item)。
那我该怎么办?我显然无法从两者继承,如果我从Item类继承,那么我不能在商店中出售Weapon对象(因为我无法将其转换为ShopItem)。
您认为这种事情的最佳解决方案是什么?
答案 0 :(得分:4)
在设计类层次结构时,您应该考虑行为(方法)而不是属性,即您可以用项目做什么?
在您的示例中,我不认为ShopItem
应该继承Item
,而是应该定义一个接口IBuyable
,表明Item
可以买的。
答案 1 :(得分:1)
您可以定义一个界面:
interface IWeapon{}
以这种方式更改您的层次结构:
class ShopWeapon : IWeapon, ShopItem {}
class Weapon : IWeapon, Item {}