多态性故障C#

时间:2009-12-12 22:17:00

标签: c# polymorphism

我试图制作类似于Rpg游戏的东西,但我真的陷入了一些我真的不知道该怎么做的东西我真的需要帮助它可能看起来像一个菜鸟问题,但请尝试回答我>。<这是父类

namespace ConsoleApplication1
{
    class Personaje
    {
        public Rango Damage;
        public int Defensa;

        public int HP;

        public int MP;
        public bool Evade;
        public bool Counter;
        public string Nombre;
        public Personaje() { }
        public Personaje(Rango Damage, int Defensa, int HP, bool Evade, bool Counter, string Nombre)
        {
            this.Damage = Damage;
            this.Defensa = Defensa;
            this.HP = HP;
            this.Evade = Evade;
            this.Counter = Counter;
            this.Nombre = Nombre;
        }
    }
}

这是其中一个孩子

namespace ConsoleApplication1
{
    class Enemigo:Personaje
    {

    }
}

这是其中一个孩子,我遇到麻烦但我不知道怎么把状态放在上面

namespace ConsoleApplication1
{
    class Poring:Enemigo
    {
        int HP = 30;
        int MP = 10;
        int Def = 0;
        public bool Evade()
        {
            return false;
        }
        public bool Counter()
        {
            return false;
        }
        public Rango Damage()
        {
            Rango r = new Rango();
            r.min = 10;
            r.max = 15;
            return r;
        }
        string Nombre = "Poring";

        //Personaje Propiedades = new Personaje(Damage,Def, HP, Evade, Counter, Nombre);
        Personaje omg = new Personaje();


    }
}

2 个答案:

答案 0 :(得分:2)

如果我正确理解你的问题,我认为你想要能够调用父对象的构造函数来传递对象的状态。你必须在类层次结构的每个级别重载构造函数。

class Enemigo : Personaje
{
    public Enemigo(Rango Damage, int Defensa, int HP, bool Evade, bool Counter, string Nombre)
       : base(Damage, Defensa, HP, Evade, Counter, Nombre)
    {
    }
}

class Poring:Enemigo
{
       public Poring(Rango Damage, int Defensa, int HP, bool Evade, bool Counter, string Nombre)
          : base(Damage, Defensa, HP, Evade, Counter, Nombre)
          {
          }
}

答案 1 :(得分:1)

在您的基类中,您已将Evade和Counter声明为公共字段。要覆盖它们,您需要创建这些属性或方法(在本例中为方法),并在基类中标记virtualabstract,在派生类中标记override。如果你希望它们是抽象的(即基类没有“默认”实现,并且派生类必须覆盖它们以提供实现),你必须使基类也是抽象的:

public abstract class Personaje
{
  public abstract bool Evade();
}

public class Poring : Enemigo
{
  public override bool Evade()
  {
    return false;
  }
}