我对某些继承有轻微的问题。
在我的基类中,我有以下构造函数:
public Camera(string n)
{
name = n;
}
然后在我的子类中,我有以下构造函数:
public StereoCameras(string n)
{
name = n;
}
但是,我的子类抱怨它不包含一个带0参数的构造函数。我很习惯使用这样的继承,我认为我已经正确地设置了我的childs构造函数。
我有什么遗失的吗?
答案 0 :(得分:7)
您需要调用基础构造函数:
public StereoCameras(string n) : base(n)
{
}
然后派生类中的赋值是多余的。
答案 1 :(得分:3)
您的子类构造函数调用等效于:
public StereoCameras(string n) : base()
因为您没有在基类中定义任何参数less构造函数,因此错误。基类的参数less构造函数被隐式调用(如果没有使用base
关键字调用<)>
请参阅:Using Constructors (C# Programming Guide) - MSDN
在派生类中,如果基类构造函数未被调用 显式地使用base关键字,默认构造函数,if 有一个,隐含地称为
要解决这个问题,你可以在基类中声明一个参数less constructor,也可以像下面那样明确地调用定义的构造函数:
public StereoCameras(string n) : base(n)
同样来自same link
如果基类不提供默认构造函数,则派生 class必须通过使用对基础构造函数进行显式调用 基
答案 2 :(得分:1)
使用
public StereoCameras(string n) : base(n)
{
}
答案 3 :(得分:0)
实例化类时,总是在派生类的构造函数之前调用基类的构造函数。如果基类不包含默认构造函数,则必须显式定义如何调用基类的构造函数。
在您的情况下,这将是(注意base
电话)
public StereoCameras(string n)
: base(n)
{
}
答案 4 :(得分:0)
只需将没有任何参数的构造函数添加到基类。这将解决您的问题。
public Camera()
{
}