带有参数的基类构造函数的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。