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

有谁知道为什么它不像那样吗?

c#继承问题——不包含0个参数的构造函数

下面编译

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#错误:父类没有包含一个接受0个参数的构造函数

很可能你的子类还有另一个没有参数的构造函数,但是这个构造函数没有以显式的方式调用基类的构造函数。正因为如此,你认为它是不相关的。然而,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.