2012-04-02 12 views
9

के माध्यम से वैकल्पिक पैरा के साथ एक विधि को आमंत्रित करें मैं प्रतिबिंब के माध्यम से एक विधि का आह्वान करने के लिए Type.InvokeMember का उपयोग कर सकता हूं, और उदाहरण के लिए पैरा एरे पैरामीटर से निपटने के लिए यह बहुत मजबूत लगता है। किसी कारण से हालांकि यह वैकल्पिक पैरामीटर से निपटता नहीं है।प्रतिबिंब

क्या कोई विधि (शायद डीएलआर का उपयोग करके) के लिए दृष्टिकोण में कोई बेहतर अंतर्निहित दृष्टिकोण है जो वैकल्पिक पैरामीटर को ध्यान में रखता है?

+0

आप methodInfo उदाहरण प्राप्त करने के लिए type.GetMethod (...) को कॉल कर सकते हैं। फिर आप वैकल्पिक पैरामीटर के लिए methodInfo.Invoke() को कॉल कर सकते हैं, आप टाइप कर सकते हैं। –

+0

गुम हो रहा है, लेकिन इसके लिए मुझे विधि के सभी संभावित उदाहरणों पर पुनरावृत्ति करने के प्रयास की आवश्यकता है और मेरे पैरामीटर वैकल्पिक दिए जाने पर काम कर रहे हैं मापदंडों। असल में बाध्यकारी मैन्युअल रूप से करना जो मैं इस समय कर रहा हूं। बस ऐसा लगता है कि Type.InvokeMember रास्ते का 9 0% चला जाता है और फिर विफल रहता है। डुप्लिकेट को देखते हुए ऐसा लगता है कि मैं इसे मैन्युअल रूप से कर रहा हूं। –

उत्तर

5

निम्नलिखित उदाहरण में, हम दो पैरामीटर के साथ एक फ़ंक्शन को कॉल कर रहे हैं जो कुछ भी नहीं लौटाता है। दूसरा पैरा वैकल्पिक है।

MethodInfo mi = default(MethodInfo); 

// Loading the assembly 
Assembly reflectionAssemby = Assembly.LoadFile(@"C:\RelectionDLL.dll"); 

// Get type of class from loaded assembly 
Type reflectionClassType = reflectionAssemby.GetType("ReflectionDLL.ReflectionClass"); 

// Create instance of the class 
object objReflection = Activator.CreateInstance(reflectionClassType); 

mi = reflectionClassType.GetMethod("pub_Inst_NoReturn_Function"); 
mi.Invoke(objReflection, new object[] { value1, Type.Missing }); 
+1

प्रतिक्रिया के लिए धन्यवाद। इसके साथ समस्या यह है कि मुझे अभी भी मेटाडेटा में खोदने की आवश्यकता है यह निर्धारित करने के लिए कि वैकल्पिक पैरामीटर मौजूद है ताकि मैं Type.Missing पास कर सकूं। मैं ऐसे समाधान की उम्मीद कर रहा था जिसने मूल रूप से रनटाइम पर सी # कंपाइलर की बाध्यकारी क्षमताओं को दोहराया। –

+0

@ जेम्ससैंट पुरानी पोस्ट, लेकिन क्या आपको अंततः इस के आसपास एक रास्ता मिल गया? –

+0

वाह हाँ बहुत पुराना ... मैंने एक तरह का रास्ता खोजा ... लेकिन बस रनलाइन पर आवश्यक निर्भरताओं के खिलाफ सी # को संकलित करने के लिए रोज़लिन कंपेलर का उपयोग करके। तो वास्तव में एक ही समस्या को हल नहीं करते हैं। लेकिन संभवतः कुछ नमूना कोड संकलित करने के लिए नई कंपाइलर सुविधाओं का उपयोग करने के तरीके हैं और फिर एएसटी का निरीक्षण करें कि यह देखने के लिए कि यह बाध्यकारी समाप्त हो गया है। –