简单代码:
class foo
{
private int a;
private int b;
public foo(int x, int y)
{
a = x;
b = y;
}
}
class bar : foo
{
private int c;
public bar(int a, int b) => c = a * b;
}
Visual Studio抱怨bar
构造函数:
错误CS7036没有给出与
x
所需的形式参数foo.foo(int, int)
对应的参数。
什么?
答案 0 :(得分:134)
问题是基类foo
没有无参数构造函数。因此,您必须使用派生类的构造函数中的参数调用基类的构造函数:
public bar(int a, int b) : base(a, b)
{
c = a * b;
}
答案 1 :(得分:23)
我可能错了,但我相信因为你继承自foo,你必须调用一个基础构造函数。既然你明确地将foo构造函数定义为require(int,int),那么你需要将它传递给链。
public bar(int a, int b) : base(a, b)
{
c = a * b;
}
这将首先初始化foo的变量然后你可以在bar中使用它们。另外,为避免混淆,我建议不要将参数命名与实例变量完全相同。尝试使用p_a或其他东西,这样你就不会意外地处理错误的变量。