Используя отражение, чтобы найти DynamicMethods - PullRequest
3 голосов
/ 12 октября 2011

Я бы хотел как-то найти все DynamicMethods в моем текущем контексте, учтите, что у меня есть следующий метод и делегат:

public delegate double DivideInvoker(int a, int b);
public DivideInvoker CreateInvoker()
{
    Type[] methodArguments = { 
                        typeof(int), 
                        typeof(int)
                    };

    DynamicMethod division = new DynamicMethod(
            "Division",
            typeof(double),
            methodArguments,
            typeof(MyMethodCreator));

    ILGenerator il = division.GetILGenerator();
    il.Emit(OpCodes.Ldarg_0);
    il.Emit(OpCodes.Ldarg_1);
    il.Emit(OpCodes.Div);
    il.Emit(OpCodes.Ret);

    var divideIt = (DivideInvoker)division.CreateDelegate(typeof(DivideInvoker));

    return divideIt;
}

Если бы я должен был сделать: var divideIt = CreateInvoker();, могу ли я как-то использовать отражение, чтобы найти метод динамического метода?

В соответствии с MSDN вышеупомянутый динамический метод будет статическим, и если он больше не будет использоваться, он будет удален GC, я просто использую это, чтобы поиграть с отражением.

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

Есть идеи?

1 Ответ

2 голосов
/ 12 октября 2011
DivideInvoker invoker = CreateInvoker();
MethodInfo method = invoker.Method;
// method will contain the MethodInfo of the Division dynamic method
// so you could use reflection on it
...