1

我有一些继承的小问题。

在我的基类中,我有以下构造函数:

    public Camera(string n)
    {
         name = n;
    }

然后在我的子类中,我有以下构造函数:

   public StereoCameras(string n) 
    {
        name = n;

    }

但是,我的子类抱怨它不包含带 0 个参数的构造函数。我对使用这样的继承还很陌生,我认为我已经正确设置了孩子的构造函数。

有什么我想念的吗?

4

5 回答 5

7

您将需要调用基本构造函数:

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

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

于 2013-05-15T11:15:09.970 回答
3

您的子类构造函数调用等效于:

public StereoCameras(string n) : base()

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

请参阅:使用构造函数(C# 编程指南)- MSDN

在派生类中,如果未使用 base 关键字显式调用基类构造函数,则隐式调用默认构造函数(如果有)

要解决这个问题,您可以在基类中声明一个无参数构造函数,或者显式调用定义的构造函数,如下所示:

public StereoCameras(string n) : base(n)

也来自同一个链接

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

于 2013-05-15T11:17:22.010 回答
1

采用

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


    }
于 2013-05-15T11:15:22.753 回答
0

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

在你的情况下,这将是(注意base电话)

public StereoCameras(string n) 
   : base(n)
{
}
于 2013-05-15T11:20:31.270 回答
0

只需向基类添加一个不带任何参数的构造函数。这将解决您的问题。

    public Camera()
    {

    }
于 2013-05-15T11:28:29.697 回答