继承构造函数问题
本文关键字:问题 构造函数 继承 | 更新日期: 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()
{
}