2011-10-12 68 views
3

我想以某種方式找到所有DynamicMethods我在目前情況下,考慮到我有以下方法和委託:使用反射來找到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上的任何東西。

任何想法?

+2

說明:他想找到所有尚未被垃圾收集的已創建DynamicMethods。 – sisve

回答

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 
+0

我不想使用它的實例,有沒有其他方法? –

+1

顯然,如果它是垃圾收集它只存在於DyanmicMethod實例中,因此您不會在加載的模塊中找到它。所以反映它的唯一方法是參考實例。 – jbtule