मैं कैसे मेरी समस्या कहा जाता है पता नहीं है के रूप में के बारे में, मैं गारंटी नहीं दे सकते, कि कोई भी एक ही सवाल हाल ही में या बिल्कुल भी कहा है।जेनेरिक्स और विरासत (मेरा बुरा शीर्षक माफ)
मैं नोटिस किया था, एक ऐसी ही शीर्षक के साथ काफी कुछ धागे देखते हैं तथापि कि है, लेकिन वे अपनी समस्या के लिए प्रासंगिक हो नहीं है।
मेरे पास एक कस्टम सूची वर्ग है, जो जेनरिक लागू करता है।
class MyList<T>
{
public void add(T item) // adds an item to the list
{ /* code */ }
public void add(MyList<T> list) // attaches an existing list to the end of the current one
{ /* code */ }
}
मैं भी श्रेणियां होती हैं:
MyList<Fruit> fruitList = new MyList<Fruit>();
// fill fruitList
fruitList.add(new Apple()); // works, of course
fruitList.add(new Banana()); // works as well, of course
MyList<Apple> appleList = new MyList<Apple>();
// fill appleList
fruitList.add(appleList); // doesn't work. Why?
हालांकि appleList एक MyList है (के:
class Apple : Fruit
और
class Banana : Fruit
अब
, प्रासंगिक कोड आता है ऐप्पल) और ऐप्पल फल है, विजुअलस्टूडियो Accep नहीं है टी MyList (एप्पल के) तर्क के रूप में, जब MyList (फल का) पूछा जाता है।
हालांकि, अगर मैं इस तरह की सूची घोषित करने के लिए किए गए:
MyList<object> fruitList = new MyList<object>();
तब सब कुछ फिर से काम करता है। मैंने वास्तव में क्या गलत किया?
एक उत्तर बहुत सराहना की जाएगी, और समय, पढ़ने के लिए भी जवाब दिए बिना लेने के लिए धन्यवाद।
FYI करें, इसके बारे में मुख्य कीवर्ड covariance, contravariance और invariance हैं। हां, जब आप इसके बारे में नहीं जानते हैं तो यह खोजना मुश्किल है। – delnan
आपको 'IList' लागू करना चाहिए। –
SLaks
नेट में सार्वजनिक सदस्य नाम ऊपरी कैमेलकेस होना चाहिए। एक बेहतर डिजाइन का सुझाव देने के लिए – SLaks