6

मैं सी # 4.0 के बारे में कुछ प्रस्तुति के माध्यम से जा रहा था और अंत में प्रस्तुतकर्ता ने निम्नलिखित कोड के साथ एक प्रश्नोत्तरी पोस्ट की।सी # नामित पैरामीटर, विरासत और अधिभार आश्चर्य

using System; 
class Base { 
    public virtual void Foo(int x = 4, int y = 5) { 
        Console.WriteLine("B x:{0}, y:{1}", x, y); 
    } 
} 

class Derived : Base { 
    public override void Foo(int y = 4, int x = 5) { 
        Console.WriteLine("D x:{0}, y:{1}", x, y); 
    } 
} 

class Program { 
    static void Main(string[] args) { 
        Base b = new Derived(); 
        b.Foo(y:1,x:0); 
    } 
} 

// The output is 
// D x:1, y:0 

मैं समझ नहीं सकता है क्यों कि निर्गम (प्रस्तोता के बिना प्रस्तुति ऑफ़लाइन पढ़ने की समस्या) का उत्पादन किया है। मैं

D x:0, y:1 

मैंने नेट खोजने के लिए नेट की खोज की लेकिन अभी भी इसे नहीं मिला। क्या कोई इसे समझा सकता है?

+0

इसका नाम पैरामीटर के साथ कुछ लेना देना नहीं है। जानें कि बहुरूपता क्या है। –

+0

समस्या यह है कि कोई भी डेवलपर डेरिवेट की उम्मीद करेगा। पॉलिमॉर्फिज्म के कारण फू को बुलाया जाना चाहिए। तो किसी के लिए यह सोचना सामान्य बात है कि Derived.Foo में नामित पैरामीटर लिया जाएगा। लेकिन चूंकि यह रनटाइम पॉलीमोर्फिज्म कंपाइलर बेस.फू से पैरामीटर नामों का उपयोग करता है। – ferosekhanj

उत्तर

3

कारण निम्न कारण प्रतीत होता है: आप Foo पर Base पर कॉल कर रहे हैं, इसलिए यह Base.Foo से पैरामीटर नाम लेता है। क्योंकि x पहला पैरामीटर है और y दूसरा पैरामीटर है, इस ऑर्डर का उपयोग ओवर्रिडेन विधि में मानों को पार करते समय किया जाएगा।

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