Реализация CLR вызовов виртуальных методов для элементов интерфейса

Из любопытства:как 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-е издание», но об этом ничего не говорится. Поэтому ответы на этот другой вопрос не отвечают на мой вопрос.

32
задан Community 23 May 2017 в 12:32
поделиться