继承构造函数问题

时间:2013-05-15 11:14:15

标签: c# inheritance

我对某些继承有轻微的问题。

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

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

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

   public StereoCameras(string n) 
    {
        name = n;

    }

但是,我的子类抱怨它不包含一个带0参数的构造函数。我很习惯使用这样的继承,我认为我已经正确地设置了我的childs构造函数。

我有什么遗失的吗?

5 个答案:

答案 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()
    {

    }