Метод 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
);
В случае Console.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
Некоторые сторонние библиотеки могут помочь вам в этом. Используя SixPack.Reflection , вы можете сделать следующее:
MethodBase writeLine = MethodReference.Get(
// Actual argument values of WriteLine are ignored.
// They are needed only to resolve the overload
() => Console.WriteLine("", null)
);