कारण यह है कि एक List<IJob>
एक List<Job>
, हालांकि एक Job
लागू करता IJob
नहीं है।
इस सह या विपरीत विचरण है (। मुझे याद है कभी नहीं है जो जो)
सोच चला जाता है कुछ इस तरह:
संकलक गारंटी नहीं दे सकते कि AddRange
केवल पैरामीटर से बाहर बातें पढ़ता है यह दिया जाता है, और इस प्रकार यह गारंटी नहीं दे सकता कि यह सुरक्षित है, और इस प्रकार यह संकलन करने में विफल रहता है।
उदाहरण के लिए, के लिए सभी संकलक जानता है, AddRange किसी अन्य वस्तु jobs
पैरामीटर में जोड़ सकता है, को लागू करने वाली IJob
(क्योंकि AddRange IJob
संग्रह की उम्मीद है), लेकिन Job
नहीं है, जो है क्या उम्मीद jobs
, और इस तरह है कि होगा सुरक्षित नहीं है।
सी # 4.0 में, इसे संभालने के लिए कुछ समर्थन है, लेकिन मुझे यकीन नहीं है कि यह आपके विशेष मामले को संभालेगा क्योंकि समर्थन को इंटरफ़ेस-स्तर पर निर्दिष्ट किया जाना चाहिए, न कि विधि-स्तर पर।
दूसरे शब्दों में, आपको इंटरफ़ेस प्रकार पर निर्दिष्ट करना होगा कि टी से संबंधित सभी चीजें केवल संग्रह में जा रही हैं, कभी भी इससे बाहर नहीं, और फिर संकलक आपको ऐसा करने की अनुमति देगा। हालांकि, एक संग्रह जिसे आप पढ़ नहीं सकते हैं वह काफी व्यर्थ होगा।
स्रोत
2010-07-27 11:50:52
स्कीट + कॉन्वर्सिस/contravariance तीन में ... दो ... एक ... – Will
काम करेगा यदि आप सी # 4.0 –
का उपयोग करने में सक्षम हैं, तो मुझे लगता है कि '// संकलित करने में असफल' टिप्पणी ऊपर दूसरा उदाहरण पहले से बाएं से अधिक है? या वह भी संकलन करने में विफल रहता है? –