Можно ли с помощью отражения найти все вызовы методов из одного класса в другой? - PullRequest
2 голосов
/ 30 сентября 2010

Я хочу найти все вызовы методов в одном классе, которые сделаны в другом классе.

Например:

Если class1 вызывает class2.Foo (), но не class2.Bar (), тогда я хочу знать об этом.

Почти как анализ сцепления. Возможно ли это с помощью отражения?

Ответы [ 3 ]

2 голосов
/ 30 сентября 2010

Нет, отражение - это все о типах, а не код. С помощью System.Reflection вы можете найти все, что захотите, о том, как выглядит тип: поля, свойства, события и методы. Но вызовы метода кодируются в CIL. Отражение на этом останавливается, и все, что вы получаете, это MethodInfo.GetMethodBody ().

Это не остановило некоторых людей; на самом деле вы можете интерпретировать CIL, переданный вам методом. Яркий свет - это Лутц Редер и его замечательный инструмент .NET Reflector. Девяносто процентов того, что я знаю о том, как на самом деле работает .NET Framework, и как я могу сам воспользоваться этим, было вручено на серебряном блюде. Это очень круто; дайте парню медаль. И MSFT следит за этим с помощью Reference Source .

0 голосов
/ 30 сентября 2010

Вы не говорите, если это в коде или в качестве утилиты.В коде вам необходимо проверить CIL класса.

Для утилит вы можете попробовать .NET Reflector или NCover (я не уверен, еслиправильное имя)..NET Reflector имеет подключаемый интерфейс, поэтому вы можете что-то с этим сделать.

0 голосов
/ 30 сентября 2010

Это возможно, так как это делается несколькими IDE (по крайней мере, для Java). В любом случае, вы, скорее всего, будете иметь частично ошибочный анализ. Во время компиляции очень трудно определить, какие методы вызываются при наличии переопределений методов в производных классах.

Нет, с отражением это невозможно. Вам нужен статический анализ кода для вычисления метрик связи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...