维护继承多态的原则有什么作用?

时间:2017-04-29 07:49:23

标签: c# oop inheritance polymorphism

该怎么办? 要将特定边属性保存为方形,请使用矩形属性?

    public Square(double edge) : base(edge, edge)
    {
    }

OR

    public Square(double edge) : base(edge, edge)
    {
        Edge = edge;
    }
    public Rectangle(double width, double height)
    {
        Width = width;
        Height = height;
    }

1 个答案:

答案 0 :(得分:4)

Edge中添加新的Square属性并不重要,但有一些更重要的事情。这就是一致性。

如果你的课程是不可改变的,那就好了。但是,如果您的类是可变的,则需要与Edge中的三个(或两个,如果您决定不添加Square)属性保持一致。当宽度改变时,高度也应该改变。当您更改Edge时,WidthHeight都应该更改。

class Square : Rectangle {
    public override double Width {
        get { return base.Width; }
        set { 
            base.Width = value; 
            base.Height = value;
        }
    }

    public override double Height {
        get { return base.Height; }
        set { 
            base.Width = value; 
            base.Height = value;
        }
    }

    public double Edge {
        get { return Width; }
        set {
            base.Width = value; 
            base.Height = value;
        }
    }

    public Square(double edge) : base(edge, edge) {

    }
}

请注意,构造函数现在为空,因为Edge实际上并未存储"。当您访问它时,它只返回宽度。

P.S。我不认为Edge是一个好名字。我称之为SideLength