2012-06-28 32 views
11

Statik bir sınıftaki bir statik yöntemin MethodInfo'sini almaya çalışıyorum. aşağıdaki satırı çalıştırırken, ben sadece temel 4 yöntemleri, ToString Eşittir, GetHashCode ve GetType olsun:Statik sınıfın statik yönteminin Yöntem1bini Kullanma

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

nasıl alabilirim bu sınıfta uygulanan diğer yöntemler?

cevap

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

Bu durumda, 0 yöntem geri alıyorum ... Bunu, aynı sınıftan mı yoksa ana yöntemden mi yüklerim? – Urik

+2

Güncelleme ... tüm yöntemleri, hem statik hem de örnek, genel ve kamuya açık olsun –

+0

Bir çekicilik gibi! Teşekkürler! – Urik

0

Açıkça statik üyeler sormalısınız. hangi olabilir (eğer statik yöntemini bilir ve bir derleme sırasında bu bilgilere erişimi varsa, doğrudan yansıma kullanmadan MethodInfo almak için Expression sınıfını kullanabilirsiniz Ayrıca

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

Her zaman değil. 'Expression.Call' kullanarak statik bir yöntemden 'MethodCallExpression' oluşturmak istersem ne olur? –

5

bu şekilde deneyin) ek çalışma zamanı hatalara neden: bir SampleStaticMethod geçirilen

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

gerçek parametreleri 0 olarak sadece bedenini fark etmezkullanılır, böylece null ve varsayılan değerleri iletebilirsiniz.

2

:

İlgili konular