Я понимаю, что, вообще говоря, есть последствия использования рефлексии. (Я сам вообще не поклонник размышлений, это чисто академический вопрос.)
Предположим, что существует некоторый класс, который выглядит так:
public class MyClass {
    public string GetName() {
        return "My Name";
    }
}
Медведь со мной здесь. Я знаю, что если у меня есть экземпляр MyClass, называемый x, я могу вызвать x.GetName(). Кроме того, я мог бы установить переменную Func<string> в x.GetName.
Теперь вот мой вопрос. Скажем, я не знаю, что указанный класс называется MyClass; У меня есть объект, x, но я понятия не имею, что это такое. Я могу проверить, имеет ли этот объект метод GetName, выполнив это:
MethodInfo getName = x.GetType().GetMethod("GetName");
Предположим, что GetName не является нулевым. Тогда я не мог бы также проверить, есть ли getName.ReturnType == typeof(string) и getName.GetParameters().Length == 0, и на этом этапе я не уверен, что метод, представленный моим объектом GetName, определенно может быть отброшен в Func<string>, каким-то образом?
Я понимаю там MethodInfo.Invoke, и я также понимаю, что всегда мог бы создать Func<string> как:
Func<string> getNameFunc = () => getName.Invoke(x, null);
Я предполагаю, что я спрашиваю, есть ли способ переместить  из a MethodInfo объект  в фактический метод, который он представляет, в результате чего стоимость выполнения рефлексии в процессе, но после этого момента можно вызвать метод напрямую (через, например, Func<string> или что-то подобное) без штрафа за производительность.
То, что я представляю, может выглядеть примерно так:
// obviously this would throw an exception if GetActualInstanceMethod returned
// something that couldn't be cast to a Func<string>
Func<string> getNameFunc = (Func<string>)getName.GetActualInstanceMethod(x);
(Я понимаю, что этого не существует, мне интересно, есть ли что-нибудь подобное.)