zeu*_*hty 87 c# inheritance constructor
简单代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio抱怨bar构造函数:
错误CS7036没有给出说法,对应于所需形式参数
x的foo.foo(int, int).
什么?
Dmi*_*try 152
问题是基类foo没有无参数构造函数.因此,您必须使用派生类的构造函数中的参数调用基类的构造函数:
public bar(int a, int b) : base(a, b)
{
c = a * b;
}
Run Code Online (Sandbox Code Playgroud)
gui*_*r80 25
我可能是错的,但我相信,因为你继承自foo,你必须调用一个基础构造函数.既然你明确地将foo构造函数定义为require(int,int),那么你需要将它传递给链.
public bar(int a, int b) : base(a, b)
{
c = a * b;
}
Run Code Online (Sandbox Code Playgroud)
这将首先初始化foo的变量然后你可以在bar中使用它们.另外,为避免混淆,我建议不要将参数命名与实例变量完全相同.请尝试使用p_a或其他内容,这样您就不会意外地处理错误的变量.
| 归档时间: |
|
| 查看次数: |
104278 次 |
| 最近记录: |