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

本文关键字:两个 问题 继承 OOP 一个 | 更新日期: 2023-09-27 18:04:10

我正在用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;
    }

现在,每个武器对象都是一个Item(这里的继承被有意移除),但这产生了一个主要问题。

虽然你可以在商店购买一些武器,但你只能通过完成任务来获得其他武器。

所以,武器有时是一个ShopItem(因为它可以在商店中购买),有时它只是一个Item(不能在商店中购买)。

物品有时可以在商店中购买,如果它们是ShopItem(因为ShopItem继承自Item)。

我能做什么呢?显然我不能同时继承两者,如果我继承Item类,那么我就不能在商店中出售Weapon对象(因为我不能将其强制转换为ShopItem)。

对于这种事情,你认为最好的解决办法是什么?

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

在设计类层次结构时,你应该考虑行为(方法)而不是属性,也就是说,你可以用一个项目做什么?

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

可以定义一个接口:

interface IWeapon{}

然后这样改变你的层次结构:

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