2012-06-04 3 views
1

Я перехожу из C++ в C#, и у меня есть вызов метода, который меня сбивает с толку. Я думаю, я мог бы догадаться, что он делает, но я ценю эксперт просто говорю мне прямо:MethodBase.GetCurrentMethod() строка рефлексии

WDResult returnValue = (WDResult)Invoke(
    (MethodInfo)MethodBase.GetCurrentMethod(), 
    new object[] { request, loadType }); 

Он смотрит на меня, как он использует отражение в infoke метода, который уже вызван. Я не понимаю, почему это можно сделать, если это так. Кроме того, почему вы делаете это с помощью рефлексии, а не только для рекурсивного вызова? Обратите внимание, что в коде другая перегрузка не используется в вызове. Запросы параметров и loadType в значительной степени передаются прямо в этот код в первой строке функции, в которой он появляется.

ответ

3

Это вызов пользовательского метода Invoke(), который принимает MethodInfo.
Это не стандартное отражение.

Просмотрите метод Invoke(), чтобы узнать, почему они это делают.

+0

Спасибо, что нашел :) –

+0

Из любопытства, что это было? – SLaks

+0

Его называют во многих местах. Он выполняет любую команду в вызывающей функции и обрабатывает ее общим способом для zip-аргументов (они большие), обеспечения шифрования и отправки в rpc api. Я не совсем уверен, что он был предназначен в оригинальном дизайне, хотя он больше похож на патч-обложку - все функции были отправлены на этот, и параметры позволяют этому обрабатывать динамический запрос с первоначальным запросом, предоставляя сжатия/шифрования/диспетчеризация. Я предполагаю, что RPC api не использовался, и это были ранее локальные вызовы. –

1

Кроме того, почему вы должны делать это с помощью отражения, а не только для рекурсивного вызова?

Вы можете скопировать эту строку в другие методы, и она будет работать, если они принимают те же аргументы.

+0

Спасибо за понимание. :) –

Смежные вопросы