C#OOP - 一个类可以是两个不同的东西(继承问题)

时间:2014-05-20 15:18:45

标签: c# .net oop inheritance paradigms

我在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)。

您认为这种事情的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:4)

在设计类层次结构时,您应该考虑行为(方法)而不是属性,即您可以用项目做什么

在您的示例中,我不认为ShopItem应该继承Item,而是应该定义一个接口IBuyable,表明Item可以买的。

答案 1 :(得分:1)

您可以定义一个界面:

interface IWeapon{}

以这种方式更改您的层次结构:

class ShopWeapon : IWeapon, ShopItem {}
class Weapon : IWeapon, Item {}