13

我正在尝试在静态类中获取静态方法的 MethodInfo。运行以下行时,我只得到了基本的 4 个方法,ToString、Equals、GetHashCode 和 GetType:

MethodInfo[] methodInfos = typeof(Program).GetMethods();

如何获取此类中实现的其他方法?

4

3 回答 3

10
var methods = typeof(Program).GetMethods(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
于 2012-06-28T14:58:12.703 回答
6

试试这个方法:

MethodInfo[] methodInfos = typeof(Program).GetMethods(BindingFlags.Static | BindingFlags.Public);
于 2012-06-28T15:01:00.877 回答
5

此外,如果您知道您的静态方法并且可以在编译时访问它,您可以使用Expression类来获取MethodInfo而不直接使用反射(这可能会导致额外的运行时错误):

public static void Main()
{
    MethodInfo staticMethodInfo = GetMethodInfo( () => SampleStaticMethod(0, null) );

    Console.WriteLine(staticMethodInfo.ToString());
}

//Method that is used to get MethodInfo from an expression with a static method call
public static MethodInfo GetMethodInfo(Expression<Action> expression)
{
    var member = expression.Body as MethodCallExpression;

    if (member != null)
        return member.Method;

    throw new ArgumentException("Expression is not a method", "expression");
}

public static string SampleStaticMethod(int a, string b)
{
    return a.ToString() + b.ToLower();
}

这里传递给 a 的实际参数SampleStaticMethod无关紧要,因为只SampleStaticMethod使用了主体,因此您可以将null默认值传递给它。

于 2014-01-11T08:04:05.103 回答