भिन्नता केवल सुरक्षित तरीके से समर्थित होगी - वास्तव में, सीएलआर के पास पहले से ही क्षमताओं का उपयोग करना है। तो List<Banana>
को List<Fruit>
(या जो कुछ भी था) के रूप में उपयोग करने की कोशिश करने की पुस्तक में मैं जो उदाहरण देता हूं, वह अभी भी काम नहीं करेगा - लेकिन कुछ अन्य परिदृश्य भी होंगे।
सबसे पहले, यह केवल इंटरफेस और प्रतिनिधियों के लिए समर्थित होगा।
दूसरा, इंटरफ़ेस/प्रतिनिधि के लेखक को in
(contravariance के लिए) या out
(कॉन्वर्सिस के लिए) के रूप में टाइप पैरामीटर को सजाने के लिए आवश्यक है। सबसे स्पष्ट उदाहरण IEnumerable<T>
है जो केवल आपको कभी भी "आउट" मान लेने देता है - यह आपको नए जोड़ने की अनुमति नहीं देता है। यह IEnumerable<out T>
बन जाएगा। इससे टाइप सुरक्षा को बिल्कुल नुकसान नहीं पहुंचाता है, लेकिन उदाहरण के लिए IEnumerable<object>
लौटने के लिए घोषित विधि से IEnumerable<string>
वापस करने देता है।
इंटरफेस का उपयोग करने के लिए ठोस उदाहरण देने के लिए contravariance कठिन है, लेकिन यह एक प्रतिनिधि के साथ आसान है। Action<T>
पर विचार करें - यह केवल एक विधि का प्रतिनिधित्व करता है जो T
पैरामीटर लेता है। यह को Action<string>
के रूप में निर्बाध रूप से परिवर्तित करने में सक्षम होना अच्छा होगा - object
पैरामीटर लेने के लिए कोई भी विधि ठीक होने जा रही है जब इसे string
के साथ प्रस्तुत किया जाता है। बेशक, सी # 2 में पहले से ही कुछ हद तक प्रतिनिधियों का सहानुभूति और contravariance है, लेकिन एक प्रतिनिधि प्रकार से दूसरे में एक वास्तविक रूपांतरण के माध्यम से (एक नया उदाहरण बनाते हैं) - उदाहरण के लिए P141-144 देखें। सी # 4 इसे और अधिक सामान्य बना देगा, और (मुझे विश्वास है) रूपांतरण के लिए एक नया उदाहरण बनाने से बचेंगे। (यह इसके बजाय एक संदर्भ रूपांतरण होगा।)
आशा है कि यह थोड़ा सा साफ़ हो जाए - कृपया मुझे बताएं अगर यह समझ में नहीं आता है!
स्रोत
2008-10-29 08:16:55
यहाँ एक अच्छा लेख है कि में प्रतिनिधियों और इंटरफेस पर आगामी सहप्रसरण और विपरीत विचरण कार्यान्वयन को शामिल किया गया है सी # 4.0: [LINQ फार्म: Covariance और Contravariance सी # 4.0] (http://blogs.msdn.com/charlie/archive/2008/10/28/linq-farm-covariance-and-contravariance-in-visual-studio-2010.aspx) – CMS
एंडर्स नोरासे [सी # 4।0 - कॉन्वर्सिस और कॉन्ट्रैक्ट-वेरिएंस] (http://web.archive.org/web/20100227031805/http://andersnoras.com/post/100795246/c-4-0-covariance-and-contra-variance) अवधारणा और शो, कि यह पहले ही आईएल में .NET 2.0 के बाद से समर्थित है। –