2011-04-05 13 views
5

क्यों ICollection<T>IEnumerable<T> और IEnumerable दोनों को लागू करता है?ICollection <T> क्यों लागू करता है दोनों IEnumerable <T> और IEnumerable

इसका उद्देश्य क्या है? IEnumerable लाभ ICollection<T> कैसे है?

+0

कुछ हद तक समान: [क्यों-करता-i -umerablet-recipient-from-ienumerable?] (Http://stackoverflow.com/questions/221691/why-does-ienumerablet-inherit-from-ienumerable?rq=1) – nawfal

उत्तर

9

गैर-जेनेरिक इंटरफ़ेस पिछड़ा संगतता के लिए है। यदि आप जेनेरिक का उपयोग करके कोड लिखते हैं और अपने संग्रह को .NET 1.0 (जिसमें जेनेरिक नहीं है) में लिखे गए कुछ मॉड्यूल में पास करना चाहते हैं, तो भी आप इसे सफल होने के लिए चाहते हैं, और आप चाहते हैं कि पुरानी विधि इसके माध्यम से पुन: सक्रिय हो सके।

0

IEnumerable<T>IEnumerable विरासत में है इसलिए यह ICollection<T> के लिए भी समझ में आता है। यह सिर्फ वही विरासत बता रहा है जो वैसे भी होगा।

11

IEnumerable<T> ही किसी भी कार्यान्वयन मजबूर करता भी गैर सामान्य IEnumerable लागू करने के लिए। यह सुरक्षित है, उसी कारण से IEnumerable<out T> .NET 4 के रूप में covariant है ... आप हमेशा गैर-जेनेरिक रूप के लिए Tobject को परिवर्तित कर सकते हैं।

असल में इसका मतलब है कि यदि आपके पास कोड है जो IEnumerable प्रकार के पैरामीटर का उपयोग करता है, तो भी आप इसे List<T> जैसे कुछ के साथ कॉल कर सकते हैं।

एरिक Lippert क्यों संग्रह अंत में कई इंटरफेस को लागू करने के बारे में blog post recently लिखा था, और ब्राड अब्राम विशिष्ट IEnumerable<T>/IEnumerable निर्णय के बारे में एक blog post back in 2005 लिखा था।

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