Разновидностью виртуальных методов являются так называемые динамические методы.
1. При их объявлении вместо ключевого слова virtual записывается ключевое слово dynamic.
2. В наследниках динамические методы перекрываются так же, как и виртуальные — с помощью зарезервированного слова override.
3. По смыслу динамические и виртуальные методы идентичны. Различие состоит только в механизме их вызова. Методы, объявленные с директивой virtual, вызываются максимально быстро, но платой за это является большой размер системных таблиц, с помощью которых определяются их адреса. Размер этих таблиц начинает сказываться с увеличением числа классов в иерархии.
4. Методы, объявленные с директивой dynamic вызываются несколько дольше, но при этом таблицы с адресами методов имеют более компактный вид, что способствует экономии памяти. Таким образом, программисту предоставляются два способа оптимизации объектов: по скорости работы (virtual) или по объему памяти (dynamic).