覆盖属性设置器

时间:2013-08-10 10:41:04

标签: c# properties override

我正在制作一个程序,其中有一些球在弹跳,但现在我想继承该类并使新的一个不可能设置它的速度

我已经尝试了这个但是没有做任何

public class Ball {
    public Ball(double posX, double posY, double rad, Vector vel) {
        Pos = new Point(posX, posY);
        Rad = rad;
        Vel = vel;
    }
    public double Rad { get; set; }

    public Point Pos { get; set; }
    public Vector Vel { get; set; }
}

public class StaticBall : Ball {
    public StaticBall(double posX, double posY, double rad) 
        : base(posX, posY, rad, new Vector(0, 0)) { 
    }
    public Vector Vel {
        get { return Vel; }
        set { Vel = Vel; }
    }
}

我应该怎么做?

1 个答案:

答案 0 :(得分:2)

  

我正在制作一个程序,其中有一些球在弹跳,但现在我想继承该类并使新的一个不可能设置它的速度

您的要求违反了Substitution Principle。如果Ball的速度可以更改,则继承自Ball的任何类的速度也必须可更改。

解决方案:不是从ConstantSpeedBall继承Ball,而是创建新的基类BallBase并从中继承ConstantSpeedBallChangingVelocityBall