2011-06-17 8 views
10

अगर मैं तरह मेरे कोड में एक प्रतिनिधि बनाने के लिए: - Invoke, BeginInvoke और EndInvokeप्रतिनिधि कैसे काम करता है?

delegate void dostuff (string o); 

यह एक वर्ग है कि System.MulticastDelegate जो तीन तरीकों को लागू करता है से निकला है उत्पन्न करता है।

अगर मैं Invoke के लिए संकलित आईएल को देखो सब मैं देख रहा है:

.method public hidebysig newslot virtual 
     instance void Invoke(string o) runtime managed 
{ 
} // end of method dostuff::Invoke 

विधि कोई कोड है। इसे कॉल करना काम करता है - प्रतिनिधि को बुलाया जाता है, लेकिन मैं नहीं देख सकता कि यह कैसे करता है।

करता कहाँ वूडू कि बुला बनाता आह्वान वास्तव में फोन प्रतिनिधि से आते हैं?

+0

यह अंतर्निहित .NET ढांचे का हिस्सा है - कॉल * आह्वान करने का आह्वान है। 'MyDelegate.Invoke()' 'MyDelegate रूप में ही है()' –

+0

MyDelegate() बस वाक्यात्मक चीनी कि MyDelegate.Invoke करने के लिए नीचे संकलित हो जाता है() - उत्पन्न आह्वान विधि के लिए एक कॉल। कॉल के लिए आईएल बस * कॉलवर्ट इंस्टेंस शून्य है ConsoleApplication1.Program/dostuff :: Invoke (string) * जो किसी भी अन्य विधि कॉल से अलग नहीं है। –

उत्तर

7

वूडू हस्ताक्षर के अंत में पाया जा सकता है: runtime managed। ध्यान दें कि आपके द्वारा प्रबंधित सभी प्रबंधित कक्षाओं और विधियों को cli managed के रूप में सजाया जाएगा।

runtime managed मतलब यह है कि क्रम तरीकों में से पूर्व अनुकूलित कार्यान्वयन प्रदान करता है।

+0

प्रतिनिधि का व्यवहार होता है। यह अपनी आमंत्रण सूची में छूट देता है - एक प्रतिनिधि कॉल करने के लिए कई विधियों का प्रतिनिधित्व कर सकता है - और प्रत्येक विधि को बदले में कॉल करता है। –

+0

मैं नहीं देख सकता कि कार्यान्वयन विधि व्यवहार को ओवरराइड कैसे कर सकती है। यह एक दिलचस्प पैटर्न है, लेकिन मैं इसका काम करने के तरीके के बारे में कोई सबूत नहीं देख सकता हूं। हालांकि यह मल्टीकास्ट प्रतिनिधियों के लिए काम नहीं करेगा। प्रतिनिधि बनाते समय यह निश्चित रूप से जेनरेट की गई प्रतिनिधि वर्ग है जो बनाई जाती है और इसके कन्स्ट्रक्टर को पास की गई विधि के साथ बुलाया जाता है। यहां कोई वूडू नहीं है, यह सिर्फ जेनरेट किए गए प्रतिनिधि वर्ग को बना रहा है जैसे किसी भी सामान्य वर्ग को बनाया गया है। –

+0

@Mongus, मेरा जवाब अपडेट किया गया। ध्यान दें कि हालांकि आमंत्रण सूची में पुनरावृत्ति के लिए "व्यवहार" प्रतिनिधि का हिस्सा नहीं है, बल्कि सिस्टम का हिस्सा है। डिलीगेट। –

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