¿Resuelve esto la violación del rectángulo cuadrado de la sustitución de Liskov?
Soy muy nuevo en los principios de diseño SOLID. Una cosa que tuve problemas con la comprensión es el ejemplo del "rectángulo cuadrado" de una violación del principio de la subestación de Liskov. ¿Por qué debería el regulador de Altura / Ancho de un Cuadrado anular los de un Rectángulo? ¿No es esto exactamente lo que está causando el problema cuando hay polimorfismo?
¿Eliminar esto no soluciona el problema?
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();
}
}
La salida es 30 como se esperaba.