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