2010-02-20 6 views
13

मैं सी # 3.0 में विस्तार विधियों के बारे में पढ़ रहा था। जिस पाठ को मैं पढ़ रहा हूं, उसका तात्पर्य है कि कक्षा में एक विधि के रूप में एक ही हस्ताक्षर के साथ एक विस्तार विधि निष्पादन के क्रम में दूसरी होगी - अर्थात, मुहरबंद वर्ग में विधि को बुलाया जाता है। यदि ऐसा है, तो आप मुहरबंद वर्ग का विस्तार कैसे कर सकते हैं?यदि एक विस्तार विधि में मुहरबंद वर्ग में एक विधि के समान हस्ताक्षर है, तो कॉल प्राथमिकता क्या है?

उत्तर

13

वास्तव में, वास्तविक विधि विस्तार विधि पर प्राथमिकता लेती है। और बस इसे स्पष्ट करने के लिए - "निष्पादन का आदेश" सुझाव देता है कि दोनों को बुलाया जा सकता है; केवल मूल विधि लागू की जाएगी। शायद एक और नाम/हस्ताक्षर चुनें; आप बंदर-पैच के विस्तार विधियों का उपयोग नहीं कर सकते हैं, अगर यह आपका इरादा है।

यदि कुछ बेस-क्लास/इंटरफेस (प्रकार के उपकरण) हैं इस विधि के पास नहीं है, तो आप इसे वहां पर डाल सकते हैं ...?

+1

हा हा! बंदर-पैच ... यह एक नया है। ठीक है, धन्यवाद, मैं सोच रहा था कि अगर मैं सही था तो यह मुहरबंद हो जाएगा और वह सीलबंद का उपयोग करने के पूरे बिंदु को हरा देगा। –

+1

@ स्कॉट - जिसे बतख-पंचिंग के रूप में भी जाना जाता है। यह कोई मज़ाक नहीं है। –

5

अन्य विधि हस्ताक्षर का उपयोग करें। विस्तार विधियों का अर्थ है कि आप सीलबंद कक्षा को नई कार्यक्षमता के साथ विस्तारित कर रहे हैं और पहले से लागू किए गए लोगों को ओवरराइड नहीं कर रहे हैं।

विस्तार विधियों में उदाहरण के सदस्यों के साथ "छुपाएं-नाम" अर्थशास्त्र है। इसका अर्थ यह है कि एक प्रकार पर किसी भी सुलभ उदाहरण सदस्य हमेशा एक ही नाम के साथ किसी भी एक्सटेंशन विधियों को छाया करेगा, भले ही एक्सटेंशन विधि बेहतर फिट हो। नतीजतन, यदि किसी इंस्टेंस सदस्य को किसी भी प्रकार के एक्सटेंशन के रूप में एक ही नाम के साथ जोड़ा जाता है, तो विस्तार विधि को अनावश्यक रूप से प्रस्तुत किया जा सकता है।

अधिक जानकारी के लिए, इस पोस्ट पर एक नज़र डालें: Extension Methods Best Practices (Extension Methods Part 6)

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