2013-04-10 9 views
8

मैंने विस्तार विधि GenericExtension लिखा था। अब मैं एक्सटेंशन विधि Extension पर कॉल करना चाहता हूं। लेकिन methodInfo का मान हमेशा शून्य है।प्रतिबिंब के साथ एक सामान्य विस्तार विधि कैसे कॉल करें?

public static class MyClass 
{ 
    public static void GenericExtension<T>(this Form a, string b) where T : Form 
    { 
     // code... 
    } 

    public static void Extension(this Form a, string b, Type c) 
    { 
     MethodInfo methodInfo = typeof(Form).GetMethod("GenericExtension", new[] { typeof(string) }); 
     MethodInfo methodInfoGeneric = methodInfo.MakeGenericMethod(new[] { c }); 
     methodInfoGeneric.Invoke(a, new object[] { a, b }); 
    } 

    private static void Main(string[] args) 
    { 
     new Form().Extension("", typeof (int)); 
    } 
} 

क्या गलत है?

+0

देखें http://stackoverflow.com/questions/5959219/how उपयोग करने के लिए-प्रतिबिंब-से-get-extension-method-on-generic-type? rq = 1 उस पर अधिक जानकारी के लिए। – skarmats

उत्तर

15

विस्तार विधि प्रकार Form से जुड़ी नहीं है, यह प्रकार MyClass से जुड़ी है, ताकि प्रकार दूर यह हड़पने है:

MethodInfo methodInfo = typeof(MyClass).GetMethod("GenericExtension", 
    new[] { typeof(Form), typeof(string) }); 
+1

अब मैं उदास हूं ... समाधान इतना आसान और स्पष्ट है धन्यवाद – David

+0

@ डेविड, कोई चिंता नहीं, आप अभी उलझन में हैं क्योंकि ** ** ऐसा लगता है कि एक्सटेंशन विधि 'फॉर्म' से जुड़ी है। आपको सिर्फ आंखों के दूसरे सेट की जरूरत है। –

-2

आप अपने विधि के लिए सामान्य पैरामीटर के रूप में स्ट्रिंग में गुजर रहे हैं ..

लेकिन अपने बाधाओं का कहना है कि टी फार्म से विरासत की जरूरत है (जो स्ट्रिंग नहीं करता है)।

मुझे लगता है कि आप typeof(MyForm) या इसके बजाय कुछ लिखना चाहते हैं।

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