如何获取一个方法的MethodBase对象



我正试图与这篇文章中发现的类一起工作,但它需要一个MethodBase来运行。

我读什么是最快的方式来获得一个MethodBase对象?但是我找不到任何可行的方法。

我需要做的是从函数中获取MethodBase对象。

例如获取Console类的静态函数WriteLine()的MethodBase或获取List<>的非静态函数Add()的MethodBase。

谢谢你的帮助!

方法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,然后对其进行参数化:

// 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

一些第三方库可以帮助你做到这一点。使用普通老百姓。反射,你可以这样做:

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

相关内容

  • 没有找到相关文章

最新更新