Таблицы виртуальных методов

При обсуждении запечатанных классов термин "виртуальная функция таблицы" упоминается вполне часто. Что точно это? Я читал о таблице метода только что (я не помню цели цели этого ни один), и Google/поиск на здесь поднимает связанные с C++ результаты.

Спасибо

18
задан Shog9 9 March 2010 в 23:52
поделиться

3 ответа

Таблица виртуальных функций C # работает в основном так же, как таблица C ++, поэтому любые ресурсы, описывающие, как Таблицы виртуальных функций C ++ также должны помочь вам хорошо работать с таблицей C #.

Например, Описание Википедии неплохое.

6
ответ дан 30 November 2019 в 08:10
поделиться

Таблица виртуальных функций" или "таблица виртуальных методов" - это список указателей методов, который есть у каждого класса. Он содержит указатели на виртуальные методы класса.

Каждый экземпляр класса имеет указатель на таблицу, который используется при вызове виртуального метода из экземпляра. Это происходит потому, что вызов виртуального метода должен вызывать метод, связанный с классом реального объекта, а не с классом ссылки на объект.

Например, если у вас есть объектная ссылка на строку:

object obj = "asdf";

и вы вызываете виртуальный метод ToString:

string text = obj.ToString();

он будет использовать метод String.ToString, а не метод Object.ToString. Он использует таблицу виртуальных методов класса String (на который указывает указатель в экземпляре строки), а не таблицу виртуальных методов класса Object.

22
ответ дан 30 November 2019 в 08:10
поделиться

определение таблицы виртуальных функций (часто называемой vtable) одинаково в C # и C ++. Это таблица поиска, используемая внутри среды выполнения для достижения полиморфного поведения абстрактного / виртуального / переопределенного метода.

Проще говоря, вы можете представить, что базовый класс с виртуальным methodA будет иметь vtable, содержащую methodA. Когда производный класс переопределяет methodA, vtable для methodA наследуется от родительского класса, но теперь будет указывать на методA в производном классе, а не на родительский класс.

1
ответ дан 30 November 2019 в 08:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: