c#继承问题——不包含0个参数的构造函数
本文关键字:参数 构造函数 0个 继承 问题 包含 | 更新日期: 2023-09-27 18:05:36
我已经阅读了其他一些相关的帖子,但我不相信我有和他们一样的问题。我相信我正在为继承的类正确地创建构造函数,但是它仍然无法工作-甚至无法识别我在那里有一个构造函数。
class BlockedNumber : PhoneNumber
{
public BlockedNumber(string a, string m, string l)
: base(a, m, l) { }
}
这仍然给了我标题中的错误:
"DTS。PhoneNumber不包含接受0个参数的构造函数。
我不知道为什么它不能正确识别我的构造函数。错误(在VS12中蓝色下划线)是在class
之后第一次使用BlockedNumber
。
有谁知道为什么它不像那样吗?
下面编译
class BlockedNumber : PhoneNumber
{
public BlockedNumber(string a, string m, string l)
: base(a, m, l) { }
}
internal class PhoneNumber
{
public PhoneNumber(string a, string m, string l) { }
}
你的问题在别处。最有可能的是,您正在其他地方实例化一个PhoneNumber
,参数为0。
如果您不直接指定: base(x,y,z)
,即调用哪个父构造函数,编译器会在默认情况下寻找不带参数的父构造函数来调用。
很可能你的子类还有另一个没有参数的构造函数,但是这个构造函数没有以显式的方式调用基类的构造函数。正因为如此,你认为它是不相关的。然而,c#为每个构造函数插入一个基类构造函数调用,因为这在CIL中是必需的。因此,另一个构造函数抱怨它无法找到要调用的基类构造函数。
从VS2010中生成一个类
internal class PhoneNumber
{
private string a;
private string m;
private string l;
public PhoneNumber(string a, string m, string l)
{
// TODO: Complete member initialization
this.a = a;
this.m = m;
this.l = l;
}
}
class BlockedNumber : PhoneNumber
{
public BlockedNumber(string a, string m, string l)
: base(a, m, l) { }
}
This code compiles just fine so just like Yuriy stated the issue must be somewhere else.