2012-06-28 23 views
11

Próbuję uzyskać MethodInfo statycznej metody w klasie statycznej. Kiedy uruchomiony następujący wiersz, mam tylko podstawowe 4 metod toString równy, GetHashCode i gettype:Uzyskiwanie MethodInfo statycznej metody klasy statycznej

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

Jak mogę uzyskać inne metody, które są realizowane w tej klasie?

Odpowiedz

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

W takim przypadku otrzymuję 0 metod wstecz ... Czy to ma znaczenie, jeśli uruchomię to z tej samej klasy lub z głównej metody? – Urik

+2

Zaktualizowano ... aby uzyskać wszystkie metody, zarówno statyczne, jak i instancyjne, publiczne i niepubliczne –

+0

Jak urok! Dzięki! – Urik

0

Musisz jawnie zapytać członków statycznych.

+0

Nie zawsze. Co się stanie, jeśli chcę utworzyć "MethodCallExpression" z metody statycznej za pomocą "Expression.Call"? –

5

Spróbuj w ten sposób:

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

Także jeśli znasz metody statyczne i mieć do niego dostęp w czasie kompilacji, można użyć Expression klasę dostać MethodInfo bez bezpośrednio przy użyciu odbicia (co może powodować dodatkowe błędy runtime):

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

Oto rzeczywiste parametry przekazane do SampleStaticMethod nie ma znaczenia, jak tylko ciało SampleStaticMethod jest używany, więc możesz przekazać null i wartości domyślne do niego.

Powiązane problemy