在动态生成类型并调用 TypeBuilder.CreateType 之后,我想创建一个指向新类型中的方法的委托。但是如果我使用类似的代码
loadedType = typeBuilder.CreateType();
myDelegate = (MyDelegate)Delegate.CreateDelegate(
typeof(MyDelegate), methodBuilder);
重用 methodBuilder 作为 methodInfo,我得到异常“MethodInfo 必须是 RuntimeMethodInfo”。现在通常我可以重新获取 MethodInfo
MethodInfo mi = loadedType.GetMethod(methodBuilder.Name);
myDelegate = (MyDelegate)Delegate.CreateDelegate(typeof(MyDelegate), mi);
但是我的类可能包含几个同名的重载方法。我如何确保我得到正确的?方法是否有一些我可以在loadedType中查找的持久标识符?
更新:好的,这就是我用来重新获取 MethodInfo 的方法。我只是希望我能确定它在所有情况下都有效。
private static MethodInfo ReacquireMethod(Type type, MethodInfo method)
{
BindingFlags flags = BindingFlags.DeclaredOnly;
flags |= (method.IsPublic ? BindingFlags.Public : BindingFlags.NonPublic);
flags |= (method.IsStatic ? BindingFlags.Static : BindingFlags.Instance);
MethodInfo m = type.GetMethod(method.Name, flags, null,
ParameterTypes(method), null);
Debug.Assert(m != null);
return m;
}