MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Как правильно организовать отношение между квадратом и прямоугольником с точки зрения наследования?"
Answer 984198
Правильно - "Square наследует Rectangle". Но не так, как у вас. У вас почему-то переопределен только конструктор, но не переопределены и не скрыты свойства SideA и SideB, поэтому квадрат, хоть и создается сначала с равными сторонами, впоследствии может обзавестись разными. Должно быть как-то так:
public class Square : Rectangle { int _side; public Square(int side) : base(side, side) { } public override int SideA { get => _side; set => _side = value; } public override int SideB { get => _side; set => _side = value; } } public class Rectangle { int _SideA; int _SideB; public virtual int SideA { get { return _SideA; } set { this._SideA = value; } } public virtual int SideB { get { return _SideB; } set { this._SideB = value; } } public Rectangle(int sideA, int sideB) { SideA = sideA; SideB = sideB; } public int Perimeter => 2 * (SideA + SideB); }
На самом деле, о "лишнем свойстве SideB" тут говорить несколько неправильно. Квадрат - все еще прямоугольник, у него есть обе стороны, просто они равны. Понятие "Квадрат" расширяет понятие "Прямоугольник" в данном случае дополнительным ограничением на равенство его свойств SideA и SideB. Если вас смущает, что в коде вида
square.SideA = 1; square.SideB = 2
одно из значений будет "молча съедено", можно заменить один из сеттеров наthrow new InvalidOperationException("Только одна сторона квадрата является изменяемой");
.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.