派生类的构造函数可以比其基类的构造函数具有更多的参数吗?

时间:2018-08-07 12:00:50

标签: c# class unity3d constructor

我有一个基类和2个派生类。基类有一些简单的受保护的float变量,而我的基类的构造函数如下:

public Enemy(float _maxhp, float _damage)
{
    maxhp = _maxhp;
    health = _maxhp;
    damage = _damage;
}

但是,我的派生类Range还有2个浮点变量attack and attackSpeed,在创建Range的新实例时需要将它们作为参数传递,但我似乎无法之所以能够做到这一点,是因为当我尝试对具有以下参数的派生类使用构造函数时,出现错误提示There is no argument that corresponds to the required formal parameter '_maxhp' of 'Enemy.Enemy(float, float)'

public Range(float _maxhp, float _damage, float _attack, float _attackSpeed)

但是具有相同数量参数的构造函数可以工作

public Range(float _maxhp, float _damage)

为什么会发生这种情况,并且有某种解决方法?预先感谢。

2 个答案:

答案 0 :(得分:10)

您必须指定如何使用base()构造函数调用在基类上调用构造函数:

public Range(float _maxhp, float _damage, float _attack, float _attackSpeed)
    : base(_maxhp, _damage)
{
    // handle _attack and _attackSpeed
}

答案 1 :(得分:3)

尝试-

public Range(float _maxhp, float _damage, float _attack, float _attackSpeed) : base(_maxhp, _damage)
{
this.attack = _attack;
this.attackSpeed = _attackSpeed;
}