पर कोई विस्तार विधि 'पहला' (बहुत सरल) कोड दिया गया।व्युत्पन्न कक्षा
public class Class1
{
}
public class Class2 : Class1
{
}
public class List1 : System.Collections.Generic.IEnumerable<Class1>
{
public new System.Collections.Generic.IEnumerator<Class1> GetEnumerator()
{
yield return new Class1();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
public class List2 : List1 , System.Collections.Generic.IEnumerable<Class2>
{
public new System.Collections.Generic.IEnumerator<Class2> GetEnumerator()
{
yield return new Class2();
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
तो कोड
var l = new List2();
var first = l.First();
संकलन नहीं होगा, लेकिन त्रुटि
'List2' के लिए एक परिभाषा शामिल नहीं है देता है 'प्रथम' और कोई विस्तार विधि 'प्रथम' प्रकार 'सूची 2' के पहले तर्क को स्वीकार करते हुए पाया जा सकता है (क्या आप एक प्रयोग निर्देश या असेंबली संदर्भ खो रहे हैं?)
यदि सूची 2 सूची 1 से प्राप्त नहीं किया गया है तो यह ठीक संकलित करता है, जो साबित करता है कि सूची 2 में वैध एक्सटेंशन विधि है।
क्या यह केवल एक भ्रामक त्रुटि का मामला है और समस्या यह है कि इसमें दो कई एक्सटेंशन विधियां हैं और यह नहीं पता कि कौन से को चुनना है?
यदि ऐसा है, तो यह क्यों नहीं कह सकता कि क्लास 2 विधि के अधिभार रिज़ॉल्यूशन के साथ उपयोग करने के समान ही विशिष्ट संस्करण है?
आप निश्चित रूप से 'सिस्टम का उपयोग कर रहे हैं। लिंक्स;', है ना? –
हां। (अन्यथा यह संकलित नहीं होगा जब List2 सूची 1 से प्राप्त नहीं किया गया है)। – sgmoore