2012-06-28 15 views
11

Estoy tratando de obtener el MethodInfo de un método estático en una clase estática. Cuando se ejecuta la siguiente línea, solo me dan los métodos básicos 4, ToString, iguales, GetHashCode y getType:Obteniendo el MethodInfo del método estático de una clase estática

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

¿Cómo puedo conseguir los otros métodos que se implementan en esta clase?

Respuesta

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

En ese caso, devuelvo 0 métodos ... ¿Importa si ejecuto esto desde la misma clase o desde el método principal? – Urik

+2

Actualizado ... para obtener todos los métodos, tanto estáticos como de instancia, públicos y no públicos –

+0

¡Como un encanto! ¡Gracias! – Urik

0

Debe preguntar explícitamente a los miembros estáticos.

+0

No siempre. ¿Qué sucede si quiero crear una 'MethodCallExpression' desde un método estático usando 'Expression.Call'? –

5

Trate de esta manera:

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

Además, si usted sabe que su método estático y tener acceso a ella en un tiempo de compilación, se puede usar Expression clase para obtener MethodInfo sin utilizar directamente la reflexión (que puede causar errores de ejecución adicionales):

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(); 
} 

Aquí parámetros reales pasados ​​a una SampleStaticMethod no importa como único órgano de 0 Se utiliza, por lo que puede pasarle null y valores predeterminados.

Cuestiones relacionadas