googling और इतने पर लैंडिंग और होने के बाद पढ़ा this other questionMethodInfo से एक प्रतिनिधि बनाता है?
यह एक MethodInfo से एक सही प्रतिनिधि का निर्माण करने के यदि आप नंबर या संकलन समय पर मापदंडों के प्रकार नहीं पता था कि संभव है?
अधिक इस पर: इस Reflection.Emit या प्रकार बिल्डरों के उपयोग के बिना सुंदर ढंग से किया जा सकता है?
यह sorta मेरे लिए एक बहुत बेकार है क्योंकि Delegate.CreateDelegate मुझे आवश्यकता है पहले पैरामीटर के रूप सही प्रतिनिधि प्रकार निर्दिष्ट करने वरना यह अपवाद फेंक या एक गलत विधि आह्वान होता है।
मैं कुछ निंजा गियर बना रहा हूं और इससे बहुत मदद मिलेगी ... धन्यवाद!
/// <summary>
/// Builds a Delegate instance from the supplied MethodInfo object and a target to invoke against.
/// </summary>
public static Delegate ToDelegate(MethodInfo mi, object target)
{
if (mi == null) throw new ArgumentNullException("mi");
Type delegateType;
var typeArgs = mi.GetParameters()
.Select(p => p.ParameterType)
.ToList();
// builds a delegate type
if (mi.ReturnType == typeof(void)) {
delegateType = Expression.GetActionType(typeArgs.ToArray());
} else {
typeArgs.Add(mi.ReturnType);
delegateType = Expression.GetFuncType(typeArgs.ToArray());
}
// creates a binded delegate if target is supplied
var result = (target == null)
? Delegate.CreateDelegate(delegateType, mi)
: Delegate.CreateDelegate(delegateType, target, mi);
return result;
}
नोट:: मैं एक Silverlight आवेदन के निर्माण कर रहा हूँ कि जिसमें मैं कई है एक निर्मित साल पहले जावास्क्रिप्ट आवेदन की जगह लेंगे
यहाँ एक सामान्य समाधान है जावास्क्रिप्ट इंटरफेस जो एक ही सिल्वरलाइट [स्क्रिप्टबलमेम्बर] विधि में कॉल करता है।
उन सभी विरासत जेएस इंटरफेस को नई सुविधाओं तक पहुंचने के लिए समर्थन के साथ-साथ नए इंटरफ़ेस की आवश्यकता होती है, इसलिए जो कुछ स्वचालित रूप से जेएस इंटरफ़ेस सेट करता है और सही "सिल्वरलाइट विधि" कॉल को "प्रतिनिधि" कॉल करता है, वह बहुत तेज़ी से काम करने में मदद करेगा।
मैं यहां कोड पोस्ट नहीं कर सकता, इसलिए सारांश है।
मैं इसे सिल्वरलाइट [स्क्रिप्टबलमेम्बर] और एक अलग जावास्क्रिप्ट इंटरफेस के साथ गोंद बनाने के लिए बना रहा हूं इसलिए मुझे दोनों स्थानों में सिंक में विधि हस्ताक्षर रखने के बारे में चिंता करने की आवश्यकता नहीं है। – chakrit
वाह .... इससे बहुत मदद मिली! तुम लोग कमाल के हो! – chakrit
@ मार्क ग्रेवेल, मैं उपरोक्त कोड जैसे डी() में बनाए गए प्रतिनिधि को आमंत्रित करने में सक्षम नहीं हूं। Googling के बाद मैंने पाया कि गतिशील इन्वोक का उपयोग विधि को आह्वान करने के लिए किया जा सकता है, जो बहुत धीमी है। कृपया मदद करें। मैं प्रतिनिधियों और घटनाओं के लिए नया हूँ। मेरी आवश्यकता है गतिशील रूप से एक विधि का आह्वान करना, संख्या या पैरामीटर के प्रकार रनटाइम पर केवल – Saranya