继承和基础构造函数

Yum*_*275 4 c# oop inheritance

所以我正在努力教自己编程,我正在为练习制作一场RPG战斗.(基本上只是c#中一个非常简单的旧RPG战斗系统)但是,我对继承有点困惑.所以我有一个基类敌人:

class Enemy
{
    public string name;
    public int health;
    public int attack;
    public int level;

    public Enemy(string _name, int _health, int _attack, int _level)
    {
        name = _name;
        health = _health;
        attack = _attack;
        level = _level;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我有这个课Dragon:

class Dragon : Enemy
{

}
Run Code Online (Sandbox Code Playgroud)

为什么这么说呢

没有给出的参数对应于'Enemy.Enemy(string,int,int,int)所需的形式参数'_name'?

我的想法是它会使用敌人的构造函数,我是否必须使每个派生类成为自己的构造函数?

Bra*_*NET 7

你问题的基本答案是肯定的.派生类必须定义构造函数,特别是当基类上没有默认构造函数时,它们必须这样做.

这是因为在创建派生类时总是会触发基类构造函数(事实上,它们首先被触发).如果您没有构造函数来传递基类构造函数的必需参数,则编译器不知道如何处理它.

在你的情况下,像

public Dragon(string _name, int _health, int _attack, int _level)
  :base(_name, _health, _attack, _level)
{
}
Run Code Online (Sandbox Code Playgroud)

会让你开始.当然,您可能需要(也可能有)其他参数Dragon.您还可以将文字传递给基础构造函数(因此您不需要Dragon使用所有基类参数对参数进行参数化).

public Dragon(string _name)
  :base(_name, 1000, 500, 10)
{
}
Run Code Online (Sandbox Code Playgroud)

唯一的要求是使用现有的基类构造函数.