构造函数定义:接收“不给出参数”

时间:2017-04-11 17:55:49

标签: c# visual-studio-2017

我正在尝试创建派生类,我收到每个构造函数的语法错误。

  

没有任何论据符合所要求的形式   'Parent.Parent(Parent)'的参数'p'

这对我没有任何意义。这是一个构造函数定义,而不是方法调用,我以前从未在非调用的东西上看到过这个。

namespace ConsoleApp1
{

        public class Parent
        {
            public string Label;

            public Parent(Parent p)
            {
                Label = p.Label;
            }
        }

        public class Child : Parent
        {
            public string Label2;

            public Child(Parent p)
            {
                Label = p.Label;
            }

            public Child(Child c)
            {
                Label = c.Label;
                Label2 = c.Label2;
            }

            public Child(string blah, string blah2)
            {
                Label = blah;
            }
        }
    class Program
    {
        static void Main(string[] args)
        {

        }
    }
}

2 个答案:

答案 0 :(得分:6)

此:

public LabelImage(LabelImage source)
{
    Label = source.Label;
    image = new MagickImage(source.image);
    fileinfo = source.fileinfo;
}

暗示这是:

public LabelImage(LabelImage source) : base()
{
    Label = source.Label;
    image = new MagickImage(source.image);
    fileinfo = source.fileinfo;
}

注意base()部分,尝试调用MyImageAndStuff无参数构造函数,或者只调用params数组参数的函数,或只调用可选参数的参数。没有这样的构造函数,因此存在错误。

你可能想要:

public LabelImage(LabelImage source) : base(source)
{
    Label = source.Label;
    image = new MagickImage(source.image);
    fileinfo = source.fileinfo;
}

...和所有其他构造函数类似的东西。或者,或者您需要向MyImageAndStuff添加无参数构造函数。如果没有已经拥有 MyImageAndStuff的实例,你就无法创建MyImageAndStuff的实例,这似乎很奇怪 - 尽管我猜source可能为空。

答案 1 :(得分:1)

因为MyImageAndStuff没有无参数构造函数或可以在没有传递任何参数的情况下解析的构造函数,所以需要在LabelImage内的所有派生构造函数中从MyImageAndStuff显式调用构造函数。例如:

  public LabelImage(LabelImage source)
    : base(source)