Behebt dies die Verletzung von Quadrat-Rechteck durch Liskov-Substitution?

Ich bin sehr neu in den SOLID-Designprinzipien. Eine Sache, bei der ich Verständnisprobleme hatte, ist das "Quadrat-Rechteck" -Beispiel einer Verletzung des Liskov-Substitutionsprinzips. Warum sollte der Höhen- / Breitensetzer eines Quadrats den eines Rechtecks ​​überschreiben? Ist es nicht genau das, was das Problem verursacht, wenn es Polymorphismus gibt?

Wird das Problem dadurch nicht behoben?

class Rectangle
{
    public /*virtual*/ double Height { get; set; }
    public /*virtual*/ double Width { get; set; }
    public double Area() { return Height * Width; }
}

class Square : Rectangle
{
    double _width; 
    double _height;
    public /*override*/ double Height
    {
        get
        {
            return _height;
        }
        set
        {
            _height = _width = value;
        }
    }
    public /*override*/ double Width
    {
        get
        {
            return _width;
        }
        set
        {
            _width = _height = value;
        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        Rectangle r = new Square();
        r.Height = 5;
        r.Width = 6;

        Console.WriteLine(r.Area());
        Console.ReadLine();
    }
}

Die Ausgabe ist wie erwartet 30.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage