2016-08-30 10 views
18

के साथ विधि ओवरलोडिंग मेरे पास दो अधिभार विधि के साथ निम्नानुसार एक वर्ग है।वैकल्पिक पैरामीटर

Class A 
{ 
    public string x(string a, string b) 
    { 
     return "hello" + a + b; 
    } 

    public string x(string a, string b, string c = "bye") 
    { 
     return c + a + b; 
    } 
} 

अगर मैं किसी अन्य वर्ग से विधि x दो मापदंडों के साथ कहते हैं, तो कौन सी विधि निष्पादित करने के लिए जा रहा है और क्यों कर रहा है? i.e,

string result = new A().x("Fname", "Lname"); 

मैंने इसे अपने कंसोल एप्लिकेशन में और 2 पैरामीटर निष्पादित विधि के साथ विधि का परीक्षण किया है। क्या कोई इसे समझा सकता है?

+0

मूल रूप से: उस मामले में डिफ़ॉल्ट मान होने के लिए पूरी तरह से बेकार है क्योंकि आप इसका कभी भी उपयोग नहीं करेंगे ... – Bakuriu

+6

मुझे आश्चर्य है कि यह कोड संकलन समय त्रुटि नहीं देता है। –

उत्तर

21

नामित और वैकल्पिक तर्क का प्रयोग अधिभार संकल्प को प्रभावित करता है:

दो उम्मीदवारों को समान रूप से अच्छा होने की न्याय रहे हैं, तो वरीयता एक उम्मीदवार वैकल्पिक पैरामीटर जिसके लिए तर्क में छोड़ दिया गया था यह नहीं है कि को जाता है कहते हैं। यह कम पैरामीटर वाले उम्मीदवारों के लिए ओवरलोड रिज़ॉल्यूशन में सामान्य वरीयता का परिणाम है।

संदर्भ: MSDN


2 मानकों string x(string a,string b) साथ ऊपर शासन विधि के दावे के अंतर्गत बुलाया जाएगा।

नोट: यदि दोनों अधिभारित विधियों में वैकल्पिक पैरामीटर हैं तो संकलक संकलन-समय अस्पष्टता त्रुटि देगा।

+5

संकलन *** एक संकलन समय *** अस्पष्टता त्रुटि देगा :) –

+1

नोट किया गया और सही किया गया। धन्यवाद। – JerryGoyal

4

यदि आप दो पैरामीटर्स के साथ विधि को कॉल करते हैं, तो यह दो पैरामीटर्स के साथ विधि का उपयोग करता है। यदि आप तीन को एक के साथ कॉल करेंगे, तो यह दूसरे का उपयोग करेगा।

0

यह हमेशा तरीका है जिसके सटीक कोई पैरामीटर के साथ पहले मैच में अपने मामले में यह निष्पादित करेंगे निष्पादित करेंगे:

वैकल्पिक पैरामीटर विधि प्राथमिकता सटीक नहीं मापदंडों के साथ कम समारोह है

public string x(string a, string b); 
संबंधित मुद्दे