Получение 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
и значения по умолчанию к нему.