Из любопытства: как виртуальный метод отправки CLR вызывает для членов интерфейса правильную реализацию?
Я знаю о VTable, который CLR поддерживает для каждого типа с слотами для каждого метода, а также тот факт, что для каждого интерфейса он имеет дополнительный список слотов методов, которые указывают на реализацию связанных интерфейсных методов. Но я не понимаю следующее: как CLR эффективно определяет, какой список слотов метода интерфейса выбрать из типа VTable?
Статья Сверлить внутри .NET Framework Internals, чтобы посмотреть, как среда CLR создает объекты времени выполнения в выпуске журнала MSDN за май 2005 года. таблицу сопоставления уровня процесса IVMap, индексированную по идентификатору интерфейса. Означает ли это, что все типы в одном и том же процессе имеют один и тот же указатель на один и тот же файл IVMap?
В нем также указано, что:
Если
MyInterface1
реализуется двумя классами, будет два записи в таблице IVMap. Запись вернется к началу суб-таблицы, встроенной в таблицу методовMyClass
.
Как CLR знает, какую запись выбрать? Выполняет ли линейный поиск, чтобы найти запись, соответствующую текущему типу? Или бинарный поиск? Или какое-то прямое индексирование и иметь карту с возможно большим количеством пустых записей в ней?
Я также прочитал главу о интерфейсах в CLR через С# 3rd edition, но об этом не говорит. Поэтому ответы на этот другой вопрос не отвечают на мой вопрос.