带有参数的基类构造函数的inheritance
简单的代码:
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抱怨“酒吧”的构造函数:
错误CS7036没有给出的参数对应于'foo.foo(int,int)'所需的forms参数'x'。
什么??
问题是基类foo
没有无参数的构造函数。 所以你必须用派生类的构造函数中的参数来调用基类的构造函数:
public bar(int a, int b) : base(a, b) { c = a * b; }
我可能是错的,但我相信既然你是从fooinheritance,你必须调用一个基础构造函数。 既然你明确地定义了foo的构造函数,现在需要(int,int)将其传递给链。
public bar(int a, int b) : base(a, b) { c = a * b; }
这将首先初始化foo的variables,然后你可以在bar中使用它们。 此外,为了避免混淆,我build议不要将参数命名为与实例variables完全相同。 尝试p_a或者其他的东西,所以你不会意外地处理错误的variables。