2015-02-11 3 views
0

У меня есть 2 классов:Вызов базового класса непосредственно в аргумент конструктора производного класса

public class LineGeometry 
{ 
    public LineGeometry(Point startPoint, Vector direction) 
    { 
     this.startPoint = startPoint; this.direction = direction;   
    } 
} 

public class LineSegmentGeometry : LineGeometry 
{ 
    Point endPoint; 
    public LineSegmentGeometry(Point startPoint, Point endPoint, Vector direction) : base (startPoint, direction) 
    { 
     this.startPoint = startPoint; this.direction = direction; this.endPoint = endPoint;   
    } 
} 

По существу, я надеюсь, чтобы добавить еще один конструктор LineSegmentGeometry, что идет что-то вроде этого:

LineSegmentGeometry(Point endPoint, LineGeometry l) 
{ 
    this.startPoint = l.startPoint; 
    this.direction = l.direction;  
    this.endPoint = endPoint; 
} 

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

Однако компилятор выдает сообщение об ошибке, что базовый класс недоступен из-за его уровня защиты. Является ли этот способ объявления конструктора хорошей идеей, и если все в порядке, как мне решить проблему с ошибкой?

+1

В стороне, я бы * сильно * рекомендую придерживаться одного утверждения в строке. Это значительно облегчает чтение. Кроме того, в настоящее время ваши объявления классов недействительны (вы не хотите, чтобы эти '()'), и ваш класс 'LineSegmentGeometry' не выводился из' LineGeometry'. –

+0

Спасибо, что отредактировал для ошибки –

ответ

3

Похоже, вы просто должны вызвать к конструктору базового класса:

LineSegmentGeometry(Point endPoint, LineGeometry l) 
    : base(l.StartPoint, l.Direction) 
{ 
    this.endPoint = endPoint; 
} 

Обратите внимание, что я имею в виду StartPoint и Direction как свойства - я бы ожидать, что поля быть частным, но там должны быть общедоступные или внутренние свойства, отображающие значения. Если нет, то вы можете добавить конструктор LineGeometry(LineGeometry) и вместо этого использовать : base(l), и пусть , что скопируйте эти поля.

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