Подтвердить что ты не робот

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

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

Спасибо

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

object obj = "asdf";

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

string text = obj.ToString();

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

Ответ 3

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

В простой форме можно представить себе, что базовый класс с виртуальным методом А будет иметь таблицу vtable, которая содержит метод А. Когда метод переопределения класса класса А, vtable для метода А наследует от родительского класса, но теперь указывает на метод А в производном классе, а не на родительский.