После динамического создания типа и вызова 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);
Но мой класс может содержать несколько перегруженных методов с тем же именем.Как мне убедиться, что я правильно выбрал?Есть ли у методов какой-либо постоянный идентификатор, который я мог бы найти в загруженном типе?
Обновление: хорошо, вот что я использую для повторного получения 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;
}