fadime Ответов: 2

Найти все ссылки на метод с помощью отражения


Привет,

Я хочу найти расположение всех вызовов методов одного класса во время выполнения. Я использую отражение, но не могу найти способ определить, где оно используется. Например:

public class Test 
{
   public void Method1()
   { 
     // do something 
   }
   public void Method2()
   {
     Method2();
   }
}


Я хочу найти во время выполнения Метод2 вызывается методом 1. Есть ли способ?

Я думаю, что так и должно быть, так как Visual Studio может сделать это через "Найти все ссылки". Спасибо.

2 Ответов

Рейтинг:
9

ankitjoshi24

Я не уверен, что это именно то, чего вы хотите. Но может быть это вам поможет: -

Тестовый класс:

public class TestClass
{
    public void Test()
    {
        Console.WriteLine("Test");
        Console.Write(10);
        DateTime date = DateTime.Now;
        Console.WriteLine(date);
    }
}



Еще один код для печати всех методов, используемых в TextClass.Тест()

MethodBase methodBase = typeof(TestClass).GetMethod("Test");
var instructions = MethodBodyReader.GetInstructions(methodBase);

foreach (Instruction instruction in instructions)
{
    MethodInfo methodInfo = instruction.Operand as MethodInfo;

    if(methodInfo != null)
    {
        Type type = methodInfo.DeclaringType;
        ParameterInfo[] parameters = methodInfo.GetParameters();

        Console.WriteLine("{0}.{1}({2});",
            type.FullName,
            methodInfo.Name,
            String.Join(", ", parameters.Select(p => p.ParameterType.FullName + " " + p.Name).ToArray())
        );
    }
}


Выход был:

System.Console.WriteLine(System.String value);
System.Console.Write(System.Int32 value);
System.DateTime.get_Now();
System.Console.WriteLine(System.Object value);


Надеюсь, это поможет. Дай мне знать, помогло тебе это или нет.

--
ЭЙДЖЕЙ


Рейтинг:
19

Andrew Rissing

Я бы предположил, что вам нужно будет разобрать тело метода методов, на которые вы смотрите, см. этот[^]. Это может помочь вам начать.

Кстати, если вы делаете это в макро Visual Studio, я считаю, что VS предоставляет некоторые объекты, которые могут быть полезны для этого без синтаксического анализа IL.


Nish Nishant

Причина моего голосования 5
Стоит 5!

SKOTAJI

Нужно ссылаться на это понятие. Хорошо постить здесь !
Проголосовали 5 !