Есть что-нибудь к этому?
Совет: ПЛОХОЙ , в этом нет сомнений.Чтение чего-то подобного было бы достаточно, чтобы держаться подальше от книги и ее автора.
Видите ли, виртуальное ключевое слово указывает на то, что «вы можете или должны переопределить этот метод - он был разработан для этого».
Для любой нетривиальной задачи я не могу представить разумную систему классов, которая позволила бы пользователю (т.е. другому программисту) переопределять каждый отдельный метод в каждом производном классе.Нормально иметь базовый абстрактный класс только с виртуальными методами.Однако, как только вы начинаете создавать производные классы, нет никаких причин для «виртуального» наложения на все - некоторые методы не должны быть расширяемыми.
Создание всего виртуального означает, что в любой точке кода, независимо от того, какойПри вызове метода вы никогда не можете быть уверены, что класс будет делать то, что вы хотите, потому что кто-то мог переопределить ваш метод, нарушив его в процессе (согласно закону Мерфи, это произойдет).Это сделает ваш код ненадежным и сложным в обслуживании.Еще одна очень интересная вещь - это способ вызова виртуальных методов в конструкторах.По сути, следуя этому совету, вы жертвуете читабельностью / надежностью кода в обмен на то, что не делаете довольно необычную опечатку.По моему мнению, оно того не стоит.
Для сравнения, не виртуальный метод гарантирует, что независимо от того, что произойдет, в этой точке кода код всегда будет работать так, как вы ожидаете(не считая ошибок, которые вы еще не обнаружили).Т.е. кто-то другой не заменит ваш метод на сломанную альтернативу.
Этот совет напоминает мне распространенную ошибку, которую обычно делают некоторые новички: вместо разработки простого решения, которое решит проблему, они отвлекаются и пытаются сделать код универсальным и расширяемым.В результате проект длится дольше или никогда не становится завершенным - потому что универсальное решение для каждого возможного сценария требует больше усилий / времени разработки, чем локализованное решение, ограниченное только текущей проблемой.
Вместо того, чтобы следовать этому »Виртуальный совет, я бы рекомендовал придерживаться закона Мерфи и принципа ПОЦЕЛУЯ .Они хорошо работали для меня .Тем не менее, они не гарантируют, что будут работать хорошо для всех остальных.