Какое же наследование без геометрии!
Скачайте проект Inheritance.Geometry и изучите файл Virtual\VirtualTask.cs. Проблема этого подхода в том, что каждый раз при добавлении нового типа тела придется менять метод в базовом классе, из-за чего код в последствии будет разрастаться и становиться все более сложным, вдобавок компилятор не способен определить, добавили ли мы необходимые вычисления в метод, и помочь нам отловить ошибку на этапе компиляции.
Предположим вы знаете, что в планах добавить ещё много новых геометрических примитивов. В этом случае разумно сделать методы ContainsPoint и GetBoundingBox абстрактными и переопределить их в классах Ball, RectangularCuboid, Cylinder и CompoundBody.
Сделайте это! Метод ContainsPoint уже реализован внутри класса Body, вам остается лишь переместить необходимые участки кода в конкретные классы фигур. Метод GetBoundingBox нужно будет реализовать с нуля. Он должен возвращать минимальный ограничивающий прямоугольный параллелепипед (RectangularCuboid), то есть такой, который полностью содержит в себе фигуру.
После такого рефакторинга код должен стать проще. В частности в финальном решении не должно остаться ни одного if-а.
Гарантия на работу | 1 год |
Средний балл | 4.96 |
Стоимость | Назначаете сами |
Эксперт | Выбираете сами |
Уникальность работы | от 70% |