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)。
对于这种事情,你认为最好的解决办法是什么?在设计类层次结构时,你应该考虑行为(方法)而不是属性,也就是说,你可以用一个项目做什么?
在你的例子中,我不认为ShopItem
应该继承Item
,而是你应该定义一个接口IBuyable
,表明可以购买Item
。
可以定义一个接口:
interface IWeapon{}
然后这样改变你的层次结构:
class ShopWeapon : IWeapon, ShopItem {}
class Weapon : IWeapon, Item {}