【问题标题】:What is right to do to maintain the principle of inheritance polymorphism?维护继承多态性原则的正确做法是什么?
【发布时间】:2017-04-29 07:49:22
【问题描述】:

要做什么? 要将特定的边缘属性保存为正方形,请使用矩形属性?

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

    public Square(double edge) : base(edge, edge)
    {
        Edge = edge;
    }

    public Rectangle(double width, double height)
    {
        Width = width;
        Height = height;
    }

【问题讨论】:

  • Edge 误导了我;它代表哪个边?正方形仍然有宽度和高度,即使它们是相同的。现在不需要正方形有EdgeWidthHeight。只需使用基类的属性即可。

标签: c# oop inheritance polymorphism


【解决方案1】:

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

如果你的类是不可变的,那很好。但是如果你的类是可变的,你需要与Square 中的三个(或者两个如果你决定不添加Edge)属性保持一致。当宽度改变时,高度也应该改变。当您更改 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 并没有真正“存储”。当你访问它时,它只返回宽度。

附:我不认为Edge 是个好名字。我会称之为SideLength

【讨论】:

    猜你喜欢
    • 2016-12-29
    • 2021-10-21
    • 1970-01-01
    • 2023-03-16
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多