2009-04-24 14 views
12

मैं प्रतिबिंब का उपयोग कर किसी ऑब्जेक्ट पर एक स्थैतिक विधि को कॉल कर रहा हूं:प्रतिबिंब का उपयोग करके स्थैतिक विधि को कॉल करते समय आप रेफरी द्वारा पैरामीटर कैसे पास करते हैं?

MyType.GetMethod("MyMethod", BindingFlags.Static).Invoke(null, new object[] { Parameter1, Parameter2 }); 

आप मानदंड से पैरामीटर कैसे पास करते हैं, बल्कि मूल्य के अनुसार? मुझे लगता है कि वे डिफ़ॉल्ट रूप से मूल्य से होंगे। सरणी में पहला पैरामीटर ("पैरामीटर 1") रेफरी से होना चाहिए, लेकिन मैं यह नहीं समझ सकता कि इसे कैसे पास किया जाए।

उत्तर

16

संदर्भ पैरामीटर (या सी # में बाहर) के लिए, प्रतिबिंब मूल पैरामीटर के समान स्थिति में ऑब्जेक्ट सरणी में नए मान की प्रतिलिपि बनायेगा। आप बदले गए संदर्भ को देखने के लिए उस मान तक पहुंच सकते हैं।

public class Example { 
    public static void Foo(ref string name) { 
    name = "foo"; 
    } 
    public static void Test() { 
    var p = new object[1]; 
    var info = typeof(Example).GetMethod("Foo"); 
    info.Invoke(null, p); 
    var returned = (string)(p[0]); // will be "foo" 
    } 
} 
1

आप Type.GetMethod फोन और BindingFlagBindingFlags.Static बस का उपयोग करते हैं, यह आपके विधि नहीं मिलेगा। ध्वज हटाएं या BindingFlags.Public जोड़ें और यह स्थैतिक विधि पायेगा।

public Test { public static void TestMethod(int num, ref string str) { } } 

typeof(Test).GetMethod("TestMethod"); // works 
typeof(Test).GetMethod("TestMethod", BindingFlags.Static); // doesn't work 
typeof(Test).GetMethod("TestMethod", BindingFlags.Static 
            | BindingFlags.Public); // works 
+0

आप सही हैं। धन्यवाद। मेरी मूल समस्या का स्रोत नहीं, लेकिन अभी भी एक समस्या है। – Deane

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

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