所以我正在尝试自学编程,并且正在制作一个角色扮演游戏来练习。 (基本上只是一个非常简单的 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;
}
}
然后我有这个类 Dragon
:
class Dragon : Enemy
{
}
为什么这么说
there is no argument given that corresponds to the required formal parameter '_name' of 'Enemy.Enemy(string, int , int, int)?
我的想法是它会使用敌人的构造函数,我是否必须让每个派生类都有自己的构造函数?
最佳答案
您问题的基本答案是是。您的派生类必须定义一个构造函数,特别是当基类上没有可用的默认构造函数时,它们必须这样做。
这是因为基类构造函数总是在创建派生类时触发(事实上,它们是先)。如果您没有构造函数来将其所需参数传递给基类构造函数,编译器将不知道如何处理。
在你的情况下,类似
public Dragon(string _name, int _health, int _attack, int _level)
:base(_name, _health, _attack, _level)
{
}
会让你开始。当然,您可能需要(并且可以拥有)您的 Dragon
的其他参数。您还可以将文字传递给基类构造函数(因此您不需要使用所有基类参数来参数化 Dragon
)。
public Dragon(string _name)
:base(_name, 1000, 500, 10)
{
}
唯一的要求是使用现有的基类构造函数。
关于c# - 继承和基础构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44553428/