Доступ к таблице виртуальных методов - PullRequest
0 голосов
/ 19 июня 2020

У меня есть библиотека на основе mono.cecil, в которой мне нужно найти все реализации некоторого виртуального метода X. Дело в том, что метод X каждый раз отличается. Это могут быть любые виртуальные методы. Я думаю, это возможно, только если как-то будет доступна vtable. Потому что такие методы, как Equals (...), могут иметь сотни реализаций. Если бы это помогло, я мог бы ограничить поиск какой-нибудь определенной сборкой.

Единственный способ, который я вижу сейчас, описан ниже:

  1. Получить DeclaringType виртуального метода.
  2. Найти все унаследованные типы в сборке.
  3. Проанализировать каждый тип, если он имеет реализацию для метода.

Подход не оптимален. Даже если бы я добавил немного кеша, он все равно был бы медленным из-за анализа сборки, но путь выполнения имеет решающее значение. Если вы видите другое решение, поделитесь им.

...