使用反射来查找DynamicMethods

时间:2011-10-12 17:37:14

标签: c# reflection reflection.emit

我想以某种方式在我当前的上下文中找到所有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 个答案:

答案 0 :(得分:2)

DivideInvoker invoker = CreateInvoker();
MethodInfo method = invoker.Method;
// method will contain the MethodInfo of the Division dynamic method
// so you could use reflection on it