Из любопытства:как CLR направляет вызовы виртуальных методов членам интерфейса в правильную реализацию?
Я знаю о таблице VTable, которую CLR поддерживает для каждого типа со слотами методов для каждого метода, а также о том, что для каждого интерфейса у нее есть дополнительный список слотов методов, указывающих на соответствующие реализации методов интерфейса. Но я не понимаю следующее:как CLR эффективно определяет, какой список слотов метода интерфейса выбрать из VTable типа?
В статье Детализация.NET Framework Internals to See How CLR Creates Runtime Objects из выпуска журнала MSDN Magazine за май 2005 г. рассказывается о таблице сопоставления уровня процесса-IVMap, индексируемой по идентификатору интерфейса. Означает ли это, что все типы в одном процессе имеют один и тот же указатель на один и тот же IVMap?
В нем также говорится, что:
Если
MyInterface1
реализован двумя классами, будет два записи в таблице IVMap. Запись будет указывать на начало из подтаблицы-, встроенной в таблицу методовMyClass
.
Как CLR узнает, какую запись выбрать? Выполняет ли он линейный поиск, чтобы найти запись, соответствующую текущему типу? Или бинарный поиск? Или какая-то прямая индексация и есть карта с, возможно, большим количеством пустых записей?
Я также читал главу «Интерфейсы в CLR через C#3-е издание», но об этом ничего не говорится. Поэтому ответы на этот другой вопрос не отвечают на мой вопрос.