क्या एक विधि एक दूसरे को अधिभारित करती है, या दोनों विधियाँ "अतिभारित" हैं


13

अगर मैं यह तरीका बनाऊं

public void foo()

और फिर मैं इस तरह से एक अतिभारित संस्करण बनाता हूं

public void foo( string bar )

क्या हम कहते हैं कि दूसरे कार्य पहले ओवरलोड करते हैं, या दोनों तरीके समान रूप से "ओवरलोड" हैं?

इसका मतलब यह होगा (मुझे लगता है), कि एक आधार प्रकार का कार्य है, जो एक अन्य फ़ंक्शन (कुछ हद तक विरासत की तरह, लेकिन वास्तव में नहीं) द्वारा अतिभारित किया जा रहा है।

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

मुझे यह सवाल तब मिला जब मैं एक अधिभार विधि बनाने की प्रक्रिया को लिखना चाहता था और मैं इसे लिखने का सबसे सही तरीका चाहता था।

उदाहरण:

  • मैं ओवरलोडिंग कर रहा हूं foo
  • मैं अधिक भार हूँ fooके साथfoo( string bar )
  • मैं एक अधिभार विधि बना रहा हूं
  • मैं फू ओवरलोडेड बना रहा हूं

तो हाँ, इस तरह की सोच मुझे मिली, मुझे यकीन नहीं है कि इसका क्या बनाना है। ऑनलाइन ओवरलोडिंग के विवरण के हजारों नहीं, तो सैकड़ों हैं, लेकिन पहली नज़र में मुझे यह पता नहीं चला।


मैं जानना चाहूंगा कि इसके लिए अधिभार शब्द का इस्तेमाल क्यों किया गया। इसका कोई मतलब नहीं लगता है। क्या लोड किया जा रहा है? इसे फिर से या अत्यधिक कैसे लोड किया जाता है?
मार्टिन माट

@MartinMaat क्या आपने थिएटन और उस पर इस तरह की टिप्पणी द्वारा स्वीकृत उत्तर पढ़ा है? वे यह समझाने का एक अच्छा काम करते हैं कि क्या हो रहा है (अधिक) लोड हो रहा है।
8bittree

मैंने उन्हें पढ़ा है, वे अवधारणा को समझाते हैं, न कि नीतिशास्त्र को।
मार्टिन माट

जवाबों:


29

जब ओवरलोड के बारे में बात की जाती है, तो फ़ंक्शन का नाम ओवरलोड होता है, न कि फ़ंक्शन ही। नाम को ओवरलोड करने वाले कार्य "ओवरलोड" हैं और नाम को ओवरलोड करते हैं, लेकिन एक दूसरे को नहीं। आपके उदाहरण में, "public void foo()"और "public void foo( string bar )"दोनों "फू" नाम को अधिभारित करते हैं। इसलिए, आप किसी एक कार्य के अधिभार और अधिभार के संदर्भ में नहीं बोल सकते, क्योंकि उनका कोई सीधा संबंध नहीं है।

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


लेकिन तब हर फ़ंक्शन अपने नाम को अधिभारित नहीं करेगा, भले ही कोई अन्य फ़ंक्शन एक ही क्यों न हो?
लेफ्टरनबाउट

मैं इससे ऊपर के सामान्य प्रश्न के उत्तर के रूप में सहमत हूं। लेकिन अगर एक को दूसरे से कोई एक कार्य कहा जाता है, तो मुझे एक समझ है जिसमें एक ने दूसरे को अधिभारित किया।
जोशुआ ड्रेक

3
@leftractionabout: "ओवरलोडिंग" से तात्पर्य है कि आप सामान्य से अधिक "लोडिंग" कर रहे हैं, इसलिए इस शब्द का उपयोग केवल तब किया जाता है जब आपके पास एक ही नाम के साथ एक से अधिक फ़ंक्शन हों।
किंडल

@Kindall से सहमत; सॉफ्टवेयर विकास के संदर्भ में "अधिभार" शब्द का अर्थ है "एक से अधिक अर्थ निर्दिष्ट करना"; एक DB में ओवरलोडिंग कॉलम (अर्थ अन्य क्षेत्रों पर निर्भर करता है), ओवरलोडिंग पैरामीटर (अर्थ अन्य मापदंडों पर निर्भर करता है), आदि। एक विधि किसी अन्य पर अधिभार नहीं डालती है, लेकिन अगर एक नाम के साथ एक से अधिक विधि है , तो नाम है " अतिभारित "।
कुटुलुमाइक

15

मैं बस कहूंगा fooकि अतिभारित है। यहाँ निश्चित रूप से कोई भी गुरु / दास या माता-पिता / बच्चे का रिश्ता नहीं चल रहा है।


2
सहमत - यह उस विधि या ऑपरेटर का नाम है जो अतिभारित है, न कि स्वयं विधि। ओवरराइडिंग के साथ भ्रमित न होने के लिए , जहां एक उपवर्ग में दिए गए तरीके का कार्यान्वयन मूल वर्ग में कार्यान्वयन को दबा देता है।
कालेब

1
मैं इससे भी सहमत हूं, लेकिन मुझे लगता है कि इसे समझाने में थिटॉन बेहतर काम करता है। आपके उत्तर के लिए धन्यवाद !
विलेम डी'हैसेलेर

3

मुझे लगता है कि इसे व्यक्त करने का एक अच्छा तरीका अंतिम परिणाम पर ध्यान केंद्रित करना है, न कि समय के साथ कक्षा में किए गए परिवर्तनों पर। इस प्रकार, कहने के बजाय "मैंने 'फू' को 'फू (अन्य मापदंडों)' के साथ उतारा," आप कहते हैं कि "फू एक अतिभारित कार्य है, जिसमें 'फू () और' फू (अन्य पैरामीटर) हैं।"

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.