Если у вас есть имя метода и массив типов параметров (подпись), вы можете использовать отражение, чтобы получить MethodInfo и вызвать метод.
MethodInfo info = myObj.GetType().GetMethod("MethodName", new object[] { typeof(string), typeof(int) });
info.Invoke(myObj, new object[] {"Hello", 22});
Вызвать MethodInfo таким образом оченьмедленный.Чтобы ускорить его, мы можем создать карту, содержащую обертки для MethodInfo, которые вызывают метод с использованием Expression API или Reflection.Emit.
Однако для этого необходимо, чтобы мы поддерживали карту подписей для MethodInfoоберток.Чтобы сделать это, нам нужен «ключ», который представляет Имя + Подпись, чтобы мы могли быстро найти требуемый MethodWrapper из нашей карты (если он существует) при попытке вызвать метод.Я ищу предложения о том, как создать этот ключ.В настоящее время я собираюсь просто объединить MethodName с именем каждого типа в сигнатуре, чтобы сгенерировать ключ, но мне это кажется медленным.
Нужны советы по лучшим вариантам.
РЕДАКТИРОВАТЬ:
Предположим, у меня есть метод с одним параметром:
DoSomething(object parameter);
Подпись "DoSomething" + typeof (объект)
Нетпредположим, что я передаю подпись «DoSomething» + typeof (SomeTypeThatDerivesFromObject)
Эти подписи должны «совпадать».