Ответ 1
var methods = typeof(Program).GetMethods(BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
Я пытаюсь получить MethodInfo статического метода в статическом классе. При выполнении следующей строки я получаю только базовые 4 метода: ToString, Equals, GetHashCode и GetType:
MethodInfo[] methodInfos = typeof(Program).GetMethods();
Как я могу получить другие методы, реализованные в этом классе?
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
и значения по умолчанию.
Вы должны явно задать статические члены.