Способы разрешения метода из имени и подписи - PullRequest
1 голос
/ 08 февраля 2012

Если у вас есть имя метода и массив типов параметров (подпись), вы можете использовать отражение, чтобы получить 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)

Эти подписи должны «совпадать».

...