Механизм работы виртуальных методов в C#

89
10 апреля 2021, 00:50

Мне немного не ясен механизм работы виртуальных методов в C#. Знаю, что для каждого класса, имеющего виртуальные методы, есть своя таблица виртуальных методов VMT. Знаю, что каждый экземпляр таких классов содержит ссылку на соответствующую VMT. Но не могу полностью понять алгоритм вызова виртуального метода.

Первый шаг - в момент вызова метода "среда исполнения" (условно назовем) берет у целевого объекта адрес VMT, по нему обращается к таблице. Далее наступает "магия", и каким-то образом определяется смещение в таблице виртуальных методов, по которому лежит адрес нужного нам метода, и обращаясь по извлеченному из VMT адресу метода "среда исполнения" извлекает нужную реализацию.

Вопрос: как после первого шага определяется смещение, по которому лежит адрес реализации метода, который мы вызвали?

READ ALSO
Объясните смысл конструкции [In, Out] byte[] array

Объясните смысл конструкции [In, Out] byte[] array

встретил такую конструкцию в кодяре: [In, Out] byte[] array Передается как параметрДайте пожалуйста четкое конкретно объяснение, зачем оно нужно,...

101
WPF Объединение ContextMenu разных контролов

WPF Объединение ContextMenu разных контролов

Есть два любых контролаОдин главный, второй дочерний

81
Гарантирует ли .NET при Select().ToList(), что порядок элементов не изменится?

Гарантирует ли .NET при Select().ToList(), что порядок элементов не изменится?

Допустим, есть List<SomeObject>, где SomeObject- это какой-то объект с десятком полей

96
Парсинг fb2 файла [закрыт]

Парсинг fb2 файла [закрыт]

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение

113