2011-03-09 20 views
12
public class A 
{ 
    public virtual string Go(string str) { return str; } 
    } 

public class B : A 
{ 
    public override string Go(string str) {return base.Go(str);} 
    public string Go(IList<string> list) {return "list";} 
} 

public static void Main(string[] args) 
{ 
    var ob = new B(); 
    Console.WriteLine(ob.Go(null)); 
} 

http://dotnetpad.net/ViewPaste/s6VZDImprk2_CqulFcDJ1Aयह "संदिग्ध संदर्भ त्रुटि" क्यों नहीं ट्रिगर करता है?

अगर मैं इस कार्यक्रम को चलाने मैं "सूची" उत्पादन के लिए बाहर भेज दिया मिलता है। यह संकलक में एक अस्पष्ट संदर्भ त्रुटि क्यों नहीं ट्रिगर करता है?

+0

कौन सी के संस्करण # आप के बारे में बात कर रहे हैं में विस्तार से समझाया गया है? –

उत्तर

15

चूंकि एक स्ट्रिंग लेने के अधिभार को बी (केवल ओवर्रिडेन) में परिभाषित नहीं किया गया है, इसलिए IList<string> लेने वाले व्यक्ति की तुलना में इसकी प्राथमिकता कम है।

इसलिए, दूसरा ओवरलोड जीतता है और कोई अस्पष्टता नहीं है।

यह http://csharpindepth.com/Articles/General/Overloading.aspx

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