直接在派生类构造函数参数中调用基类

时间:2015-02-11 08:30:00

标签: c# inheritance

我有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 个答案:

答案 0 :(得分:3)

听起来你应该调用基类构造函数:

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

请注意,我将StartPointDirection称为属性 - 我希望字段是私有的,但是要公开或内部属性公开值。如果还没有,那么您可以添加LineGeometry(LineGeometry)构造函数,然后使用: base(l),然后让 复制字段。