Содержание
Виртуальный метод может иметь тело реализации. Если объявление метода экземпляра содержит модификатор virtual, метод называется виртуальным. После использования модификатора virtual больше нельзя использовать модификаторы static, abstract или override.
Код виртуального метода в паттерне «Простая фабрика»:
Видно, что класс содержит метод GetResult(). Метод GetResult() содержит модификатор virtual, который указывает, что производные классы базового класса могут переопределять этот метод. Назначение метода GetResult(): вывести следующее сообщение"This is a virtual method!"в консоль.
Реализация виртуального метода может быть заменена производным классом. Процесс замены реализации унаследованного виртуального метода называется переопределением этого метода. При вызове виртуального метода именно тип времени выполнения экземпляра, участвующего в вызове, определяет, какая реализация метода фактически вызывается.
Разница между абстрактными методами и виртуальными методами
- 1. Виртуальные методы должны иметь часть реализации; абстрактные методы не предоставляют часть реализации. Абстрактный метод — это метод, который заставляет производные классы переопределить его; иначе экземпляр производного класса не может быть создан.
- 2. Абстрактные методы могут быть объявлены только в абстрактных классах; виртуальные методы — нет. Если класс содержит абстрактный метод, то класс также является абстрактным, и он также должен быть объявлен как abstract.
- 3. Абстрактные методы должны быть переопределены в производных классах, что похоже на интерфейсы. Виртуальные методы не обязательно должны быть переопределены в производных классах.
Проще говоря, абстрактные методы должны быть реализованы подклассами. Виртуальные методы уже реализованы и могут быть переопределены подклассами, а могут и не переопределяться, в зависимости от требований.
И абстрактные методы, и виртуальные методы могут быть переопределены производными классами.
Итог
В целом, виртуальный метод — это метод, объявление которого содержит модификатор virtual. Пока это единственный способ это понять. Если позже я получу более глубокое понимание, я добавлю ещё. Приглашаю всех поделиться своим пониманием.