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

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

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

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

Ответ 1

var methods = typeof(Program).GetMethods(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

Ответ 2

Попробуйте следующим образом:

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

Ответ 3

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

Ответ 4

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