2013-05-15 3 views
1

У меня небольшая проблема с некоторым наследованием.Проблема конструктора наследования

В моем базовом классе у меня есть следующий конструктор:

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

Тогда в моем классе ребенка у меня есть следующий конструктор:

public StereoCameras(string n) 
    { 
     name = n; 

    } 

Как всегда, мой класс ребенок жалуется, что не содержит конструктор, который принимает 0 аргументов. Я довольно новичок в использовании такого наследования, и я думал, что правильно настроил свой конструктор childs.

Есть ли что-то, что мне не хватает?

ответ

7

Вам нужно будет ссылаться на базовый конструктор:

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

Тогда задание в производном классе является излишним.

+0

Блестящий. Спасибо. – N0xus

1

Использование

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


    } 
+0

Спасибо большое :) – N0xus

3

Ваш ребенок конструктор класса вызова эквивалентен:

public StereoCameras(string n) : base() 

, так как вы не определили какой-либо параметр меньше конструктор в вашем базовом классе, поэтому погрешность. Параметр меньше конструктор базового класса вызывается неявно (если она не вызывается с помощью base ключевого слова)

См: Using Constructors (C# Programming Guide) - MSDN

В производном классе, если конструктор базового класса не называется явно с помощью основного ключевого слова, конструктор по умолчанию, если есть один, называется неявным

Чтобы прийти к р РОБЛЕМА вы можете либо объявить параметр меньше конструктора в базовом классе или вызвать определенный конструктор explictily как:

public StereoCameras(string n) : base(n) 

Кроме того, из same link

Если базовый класс не предоставляет конструктор по умолчанию, полученный класс должен сделать явный вызов базовому конструктору с использованием базы .

0

При создании экземпляра класса конструктор базового класса всегда вызывается перед конструктором производного класса. Если базовый класс не содержит конструктор по умолчанию, вы должны явно определить, как вызвать конструктор базового класса.

В вашем случае это будет (обратите внимание на base вызов)

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

Просто добавьте конструктор без какого-либо параметра базового класса. Это решит вашу проблему.

public Camera() 
    { 

    } 
Смежные вопросы