2012-06-28 23 views
11

की स्थिर विधि के MethodInfo प्राप्त करना मैं एक स्थिर वर्ग में एक स्थिर विधि के MethodInfo प्राप्त करने का प्रयास कर रहा हूं। जब निम्न पंक्ति चल रहा है, मैं केवल बुनियादी 4 तरीकों, ToString, इसके बराबर है, GetHashCode और GetType मिलती है:एक स्थिर वर्ग

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

मैं कैसे प्राप्त कर सकते हैं अन्य तरीकों कि इस वर्ग में लागू किया जाता है?

उत्तर

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

उस मामले में मुझे 0 विधियां वापस मिलती हैं ... क्या इससे कोई फर्क पड़ता है कि मैं इसे एक ही कक्षा से या मुख्य विधि से चलाता हूं? – Urik

+2

अद्यतन ... सभी विधियों, स्थिर और उदाहरण, सार्वजनिक और गैर-गणराज्य –

+0

दोनों आकर्षण प्राप्त करने के लिए! धन्यवाद! – Urik

0

आपको स्पष्ट रूप से स्थिर सदस्यों से पूछना चाहिए। अगर आप अपने स्थिर विधि को जानते हैं और एक संकलन समय पर यह करने के लिए उपयोग कर सकते है, आप सीधे प्रतिबिंब का उपयोग किए बिना MethodInfo पाने के लिए Expression वर्ग इस्तेमाल कर सकते हैं

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

हमेशा नहीं। क्या होगा यदि मैं 'Expression.Call' का उपयोग कर एक स्थिर विधि से 'MethodCallExpression' बनाना चाहता हूं? –

5

इस तरह से प्रयास करें

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 के लिए पारित पैरामीटर 0 के रूप में केवल शरीर कोई फर्क नहीं पड़ता: अतिरिक्त क्रम त्रुटियों) का कारणका उपयोग किया जाता है, इसलिए आप null और इसके लिए डिफ़ॉल्ट मान पास कर सकते हैं।

2

इसके अलावा (जो कर सकते हैं:

संबंधित मुद्दे