继承的组合 - 避免抽象类

问题描述 投票:2回答:2

我正在阅读关于继承的组合的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个问题:

  1. 我是否正确实施了作文?
  2. 我的Sword类是否也应该实现IGameObject接口?
  3. 我的IWeapon包含IGameObject getter可以吗? (原因是,如果我将它存储为IWeapon,没有IGameObject getter,那么我怎样才能获得IGameObject的详细信息?)
c# oop inheritance composition
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.