Практический смысл виртуальных методов?

программирование C# ООП net виртуальны

Практический смысл виртуальных методов.
=====================================
Добрый день, изучаю виртуальные методы, все понятно реализация и тд
Но не могу понять практический смысл, ну зачем мне перезаписывать метод.

Нужно обяз. иметь базовый класс, класс наследник, обяз. использовать модификаторы virtual/override
Зачем это нужно в реальной работе? Не уж то невозможно построить нормально алгоритм работы вашей программы без виртуальных методов.

Прошу привести более рабочие примеры, а не выписку простейшего примера из Вики или др. источника ( примеры ABC не раскарывают практический смысл темы )

Заранее спасибо!
Ответы:
> Нужно обяз. иметь....
Виртуальные методы позволяют реализовать штуку под страшным названием "полиморфизм". Это если умными словами...
А смысл вот в чем:
Если нужно с разными объектами поизвести одно и то же действие, но по-разному (в зависимости от объекта), то объекты должны иметь одинаковые методы, выполняющие различную работу.
Стандартный пример:
Если описаны объекты "квадрат", "окружность", "треугольник"(square, circle, triangle), то у каждого должен быть метод "нарисовать" (draw). Но работать они будут по-разному (квадрат рисуется иначе, чем окружность и т.д.). И, если использовать эти (и другие подобные объекты) для построения изображения, удобно составлять массив из них, который будет обрабатываться элемент за элементом.
Чтобы это сработало, создается класс-предок "фигура" (shape), в котором описывается виртуальный метод draw. Этот метод потом переопределяется в классах-потомках square, circle, triangle, где описывается, как, собственно, рисовать квадрат, окружность и т.д.
Массив нужно будет объявить типа "shape", а элементы инициализировать по мере необходимости "квадратами", "окружностями" и т.д. Тогда, чтобы нарисовать все изображение, достаточно в цикле перебрать все элементы, и для каждого вызвать метод "draw()". Этот метод будет у любого элемента, и будет делать именно то, что нужно: у элемента типа square будет рисовать квадрат, у circle - окружность, и т.д.


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.