我正在阅读关于继承的组合的wiki article,在示例中他们使用了抽象类。假设你想避免他们完全使用抽象类,只使用具体的类。我想知道,我的例子是正确使用构图。假设我有以下IGameobject接口。
public interface IGameObject
{
string Name {get;}
}
以及随后的武器界面:
//Note the IGameObject getter
public interface IWeapon
{
int Damage {get; }
IGameObject gameObject {get;}
}
通常,在我的游戏中,武器是一个IGameObject。然而,考虑到我们正在使用组合,根据维基文章,这是一种关系。
现在,我可以在创建Sword对象时执行此操作:
public class Sword : IWeapon
{
private IWeapon weaponObject;
public Sword(IWeapon weapon)
{
this.weaponObject = weapon;
}
public int Damage
{
get
{
return this.weaponObject.Damage;
}
}
public IGameObject gameObject
{
get
{
return this.weaponObject.gameObject;
}
}
}
我现在可以将我的剑存放在一个集合中,例如List:
List<IWeapon> weapons = new List<IWeapon>();
weapons.add(swordObj)
并且仍然可以访问我的IGameObject。
现在,我有3个问题:
IGameObject
接口?IGameObject getter
可以吗? (原因是,如果我将它存储为IWeapon,没有IGameObject getter,那么我怎样才能获得IGameObject
的详细信息?)