带有包/名称空间的继承[C#]

带有包/名称空间的继承[C#],c#,inheritance,namespaces,package,C#,Inheritance,Namespaces,Package,我想在子包中重新定义包的类,同时保持层次结构 我本想做这样的事情: namespace RPG { public class Actor {} public class Character : Actor {} } public class Actor : RPG.Actor {} //kind of a diamond problem public class Character : Actor, RPG.Character {} 我知道这是不正确的;C#不支持多重继承,但我

我想在子包中重新定义包的类,同时保持层次结构

我本想做这样的事情:

namespace RPG {

  public class Actor {}

  public class Character : Actor {}
}

public class Actor : RPG.Actor {}

//kind of a diamond problem
public class Character : Actor, RPG.Character {}
我知道这是不正确的;C#不支持多重继承,但我不知道解决这种重新定义的最佳方法

接口不能解决我的问题。我可以用构图做类似的事情:

public class Character : Actor {

    private RPG.Character basis;

    // and do this for each attribute and method
    public int atk { get { return basis.atk } set { basis.atk = value; } }
}
但是看起来不太好。此外,我还遇到了另一个问题

namespace RPG {

    public class Actor {

        public List<Stat> stats { get; set; }
    }

    public class Stat {}
}

public class Actor {

    private RPG.Actor basis;

    //I can't do that because Stat does not inherit from RPG.Stat
    public override List<RPG.Stat> stats { get; set; }
}

public class Stat {

    private RPG.Stat basis;
}
namespace-RPG{
公共级演员{
公共列表统计信息{get;set;}
}
公共类Stat{}
}
公共级演员{
私人角色扮演者基础;
//我不能这么做,因为Stat不是从RPG.Stat继承的
公共覆盖列表统计信息{get;set;}
}
公共类统计{
私人RPG.统计基础;
}
解决我的问题的最佳方法是什么?

使用而不是继承

很难画一个直接的例子,因为你没有为你的RPG演员/角色提供任何动作,但概念是你将这些动作注入到你的类的构造函数中

在这种情况下,“移动”是指以下行为:

class Fighter
{
    public int Health = 100;
    public string Name;

    private Move _move;

    public string MoveName
    {
        get
        {
            return _move.Name;
        }
    }
    public int MoveDamage
    {
        get
        {
            return _move.Damage;
        }
    }

    public Fighter(string name, Move defaultMove)
    {
        Name = name;

        _move = defaultMove;
    }

    public void Attack(Fighter defendant)
    {
        if (_move != null)
            _move.Attack(defendant);
    }

    public void SetMove(Move move)
    {
        if (move != null)
            _move = move;
    }
}

abstract class Move
{
    public int Damage { get; set; }
    public string Name { get; set; }

    protected Move(int damage,string name)
    {
        Damage = damage;
        Name = name;
    }

    public void Attack(Fighter defendant)
    {
        defendant.Health -= Damage;
    }
}

class PunchMove:Move
{
    public PunchMove() : base(5, "Punch")
    {
    }
}

class KickMove:Move
{
    public KickMove() : base(7, "Kick")
    {
    }
}
试试这个

namespace RPG {

  public class Actor {

  public void d(){
  System.Console.Write("fhdf");
  }

  }

  public class Character : Actor {}
}


////////////////
public class Character :  RPG.Character {}
class Program
{
    static void Main()
    {
        Character c = new Character();
        c.d();
        Console.WriteLine("Hello, World!");
    }
}

这有什么用?这是如何回答这个问题的?这是继承层次结构。从子类继承可以访问树中其所有父类的所有公共成员。(例如,A是父类B是命名空间Z中的子类,D是另一命名空间中B的子类,则B可以访问A的公共成员。)。