Получение MethodInfo статического метода статического класса

Я пытаюсь получить MethodInfo статического метода в статическом классе. При выполнении следующей строки я получаю только основные 4 метода: ToString, Equals, GetHashCode и GetType:

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

Как я могу получить другие методы, которые реализованы в этом классе?

3 ответа

Решение
var methods = typeof(Program).GetMethods(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

Попробуйте так:

MethodInfo[] methodInfos = typeof(Program).GetMethods(BindingFlags.Static | BindingFlags.Public);

Также, если вы знаете свой статический метод и имеете доступ к нему во время компиляции, вы можете использовать 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();
}

Здесь фактические параметры передаются SampleStaticMethod не имеет значения, как только совокупность SampleStaticMethod используется, чтобы вы могли пройти null и значения по умолчанию к нему.

Вы должны явно задать статические члены.

Другие вопросы по тегам