Я не могу дать вам никакого представления о том, как это делается в IL, но основная теория проста.
Когда компилятор видит объявление метода virtual , вместо того, чтобы присоединять метод к классу, он добавляет его к так называемой vtable
(таблице виртуальных методов) для этого класса, который содержит указатели на функции.
Теперь, поскольку vtable
является частью класса, он наследуется его подклассами и, следовательно, виртуальные методы также наследуются. Теперь приходит бит отмены. Когда компилятор видит переопределение в объявлении метода, он ищет vtable
, находит метод для переопределения и изменяет указатель функции, чтобы он указывал на новое определение.
Таким образом, вы получаете как наследование методов от родительских классов, так и возможность изменять их определения в дочерних классах.
Для получения дополнительной информации см. Статью Википедии о Таблица виртуальных методов .