继承构造函数问题

本文关键字:问题 构造函数 继承 | 更新日期: 2023-09-27 18:13:34

我有一些继承的小问题。

在我的基类中,我有以下构造函数:
    public Camera(string n)
    {
         name = n;
    }
在我的子类中,我有以下构造函数:
   public StereoCameras(string n) 
    {
        name = n;
    }

然而,我的子类抱怨它没有包含一个接受0个参数的构造函数。我对像这样使用继承相当陌生,我认为我已经正确地设置了我的children构造函数。

我错过了什么吗?

继承构造函数问题

您需要调用基构造函数:

public StereoCameras(string n) : base(n)
{
}

那么派生类中的赋值是多余的

您的子类构造函数调用相当于:

public StereoCameras(string n) : base()

,因为您没有在基类中定义任何无参数构造函数,因此出现错误。基类的无参数构造函数被隐式调用(如果没有使用base关键字调用)

参见:使用构造函数(c#编程指南)- MSDN

在派生类中,如果未调用基类构造函数通过使用base关键字、默认构造函数if显式地有一个,叫做隐式

要解决这个问题,您可以在基类中声明一个无参数的构造函数,或者显式调用已定义的构造函数,如:
public StereoCameras(string n) : base(n)

同样来自同一链接

如果基类不提供默认构造函数,则派生的类必须使用对基构造函数进行显式调用基地。

使用

  public StereoCameras(string n) : base(n)
    {

    }

当类被实例化时,基类的构造函数总是在派生类的构造函数之前被调用。如果基类不包含默认构造函数,则必须显式定义如何调用基类的构造函数。

在您的情况下,这将是(注意base调用)

public StereoCameras(string n) 
   : base(n)
{
}

只需在基类中添加一个不带任何参数的构造函数。这会解决你的问题。

    public Camera()
    {
    }