Аз съм много нов в принципите на дизайна на SOLID. Едно нещо, което имах проблем с разбирането, е примерът "Квадрат-правоъгълник" за нарушение на принципа на заместване на Лисков. Защо сетерът за височина/ширина на квадрат трябва да отменя тези на правоъгълник? Не е ли точно това, което причинява проблема, когато има полиморфизъм?
Премахването на това не решава ли проблема?
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();
}
}
Резултатът е 30, както се очаква.
Rectangle
няма да очакват настройката на едно измерение да повлияе на другото. - person Lee   schedule 09.08.2013