При обсуждении запечатанных классов термин "виртуальная функция таблицы" упоминается вполне часто. Что точно это? Я читал о таблице метода только что (я не помню цели цели этого ни один), и Google/поиск на здесь поднимает связанные с C++ результаты.
Спасибо
Таблица виртуальных функций C # работает в основном так же, как таблица C ++, поэтому любые ресурсы, описывающие, как Таблицы виртуальных функций C ++ также должны помочь вам хорошо работать с таблицей C #.
Например, Описание Википедии неплохое.
Таблица виртуальных функций" или "таблица виртуальных методов" - это список указателей методов, который есть у каждого класса. Он содержит указатели на виртуальные методы класса.
Каждый экземпляр класса имеет указатель на таблицу, который используется при вызове виртуального метода из экземпляра. Это происходит потому, что вызов виртуального метода должен вызывать метод, связанный с классом реального объекта, а не с классом ссылки на объект.
Например, если у вас есть объектная ссылка на строку:
object obj = "asdf";
и вы вызываете виртуальный метод ToString:
string text = obj.ToString();
он будет использовать метод String.ToString, а не метод Object.ToString. Он использует таблицу виртуальных методов класса String (на который указывает указатель в экземпляре строки), а не таблицу виртуальных методов класса Object.
определение таблицы виртуальных функций (часто называемой vtable) одинаково в C # и C ++. Это таблица поиска, используемая внутри среды выполнения для достижения полиморфного поведения абстрактного / виртуального / переопределенного метода.
Проще говоря, вы можете представить, что базовый класс с виртуальным methodA будет иметь vtable, содержащую methodA. Когда производный класс переопределяет methodA, vtable для methodA наследуется от родительского класса, но теперь будет указывать на методA в производном классе, а не на родительский класс.