ठीक है, मैं सूक्ष्म अंतर को समझ गया जहां फ़ंक्शन अधिभार एकाधिक-प्रेषण से अलग है।
असल में, अंतर यह है कि कॉल करने के लिए कौन सी विधि को रन-टाइम या संकलन-समय पर चुना जाता है। अब, मुझे पता है कि सभी ने यह कहा है, लेकिन एक स्पष्ट उदाहरण के बिना यह बहुत स्पष्ट लगता है, क्योंकि सी # स्थिर रूप से टाइप किया गया है और बहु-प्रेषण भाषाएं (जाहिर है, मेरे लिए, कम से कम) गतिशील रूप से टाइप की जाती है। अभी तक, केवल उस परिभाषा के साथ एकाधिक प्रेषण और फ़ंक्शन ओवरलोडिंग बिल्कुल मेरे जैसा ही लगती है।
वह मामला जहां यह वास्तविक अंतर बनाता है, जब आपके पास पैरामीटर के प्रकार पर भिन्न विधि के 2 ओवरलोड होते हैं, लेकिन 2 प्रकार पॉलीमोर्फिक होते हैं, और आप उच्च प्रकार के रूप में घोषित संदर्भ के साथ कॉल करते हैं, कम प्रकार का ऑब्जेक्ट है ...
उदाहरण (किसी एक बेहतर तरीका यह व्यक्त करने के लिए के बारे में सोच सकते हैं, इस उत्तर को संपादित करने में संकोच न करें):
int CaptureSpaceShip(IRebelAllianceShip ship) {}
int CaptureSpaceShip(XWing ship) {}
void Main() {
IRebelAllianceShip theShip = new XWing();
CaptureSpaceShip(theShip);
}
XWing जाहिर IRebelAllianceShip लागू करता है। इस मामले में, पहली विधि को बुलाया जाएगा, जबकि यदि सी # ने एकाधिक प्रेषण लागू किया है, तो दूसरी विधि को बुलाया जाएगा।
डॉक्टर रीहश के बारे में खेद है ... यह मुझे प्रत्येक प्रेषण विधि के लिए परिभाषाओं को पढ़ने के बजाय, इस अंतर को समझाने का सबसे स्पष्ट तरीका प्रतीत होता है।
अधिक औपचारिक स्पष्टीकरण के लिए: http://en.wikipedia.org/wiki/Double_dispatch#Double_dispatch_is_more_than_function_overloading
स्रोत
2009-01-27 14:42:51
यह प्रमुख अंतर का एक अच्छा उदाहरण है। –
धन्यवाद! मुझे इस तरह का एक उदाहरण चाहिए। – John
@ डैनियल मैग्लिओला, कृपया ध्यान दें कि डायनामिक प्रेषण अब गतिशील – RichardOD