Как получить объект MethodBase для метода?

Я пытаюсь работать с классом, найденным в этом в должности но для запуска требуется MethodBase.

Я прочитала каков самый быстрый способ получить объект MethodBase? но я не мог получить разрешение на работу.

Что мне нужно сделать, это получить объект MethodBase из функции.

например, получение MethodBase для статической функции WriteLine () консоли класса или получение MethodBase для нестатической функции Добавить () из списка.

Спасибо за вашу помощь!

1 ответов


Способ 1

вы можете использовать отражение напрямую:

MethodBase writeLine = typeof(Console).GetMethod(
    "WriteLine", // Name of the method
    BindingFlags.Static | BindingFlags.Public, // We want a public static method
    null,
    new[] { typeof(string), typeof(object[]) }, // WriteLine(string, object[]),
    null
);

В случае консоли.Writeline (), существует много перегрузок для этого метода. Вам нужно будет использовать дополнительные параметры GetMethod, чтобы получить правильный.

Если метод является универсальным и вы не знаете аргумент типа статически, вам нужно получить MethodInfo для метода open, а затем параметризовать его:

// No need for the other parameters of GetMethod because there
// is only one Add method on IList<T>
MethodBase listAddGeneric = typeof(IList<>).GetMethod("Add");

// listAddGeneric cannot be invoked because we did not specify T
// Let's do that now:
MethodBase listAddInt = listAddGeneric.MakeGenericMethod(typeof(int));
// Now we have a reference to IList<int>.Add

способ 2

некоторые сторонние библиотеки могут помочь вам в этом. Используя шесть пакетов.Отражение!--19-->, вы можете сделать следующее:

MethodBase writeLine = MethodReference.Get(
    // Actual argument values of WriteLine are ignored.
    // They are needed only to resolve the overload
    () => Console.WriteLine("", null)
);