2009-09-01 15 views
6

कृपया निम्नलिखित कोड पर विचार करें:IENumerable: ओओपी के संदर्भ में इसका क्या अर्थ है

public class Person 
(
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    Public int Age {get; set;} 
} 

IEnumerable <Person> people; 

इसके अलावा मैंने कई प्रोग्रामों में देखा है जैसे <IQueryable> इसका क्या अर्थ है?

IEnumerable<Person> का अर्थ क्या है?

+3

आईनेमरेबल एक नेट प्रकार है, ओओपी शब्द – Gishu

+0

बीटीडब्ल्यू नहीं है, यह ओओपी (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग) ओओपीएस नहीं है। हालांकि मैंने इसे ठीक करने के लिए संपादित किया है। – Aamir

+0

@ आमिर आप सही हैं। मैं अर्थपूर्ण प्रसार की मांग करता हूं :) - हालांकि यदि आप एलन के और कुछ अन्य प्रतिष्ठित लोगों से पूछते हैं, तो ओओपीएस यह क्या है जो इसके लिए उपयुक्त है। – Gishu

उत्तर

4

IEnumerable<T>

कई अलग अलग तरीके है कि बातें का एक सेट संग्रहित किया जा सकता है, एक सूची में, किसी सरणी में, एक डेटाबेस में आदि एक बात यह है कि इन भंडारण तंत्र आम में है वह यह है कि चीजों का सेट आयोजित किया जा सकता है अंकित, उदाहरण के लिए foreach जैसे भाषा निर्माण का उपयोग करके प्रत्येक को एक दूसरे के बाद एक्सेस किया जा सकता है।

IEnumerable<T> इंटरफ़ेस उस सामान्य इंटरफ़ेस का प्रतिनिधित्व करता है कि चीजों के सभी धारकों को गणना सक्षम करना है।इसलिए IEnumberable<Person एक इंटरफ़ेस का प्रतिनिधित्व करता है जो Person ऑब्जेक्ट्स के सेट की गणना को वास्तविक तरीके से निर्दिष्ट किए बिना वास्तविक वस्तुओं के विशिष्ट होने के बिना अनुमति देता है।

IQueryable<T>

यह IEnumerable<T> के लिए एक विस्तार है, लेकिन कुछ LINQ के लिए विशिष्ट प्रतिनिधित्व करता है। LINQ में आप क्वेरी निर्दिष्ट कर सकते हैं जो आइटमों के सेट (या सेट) को फ़िल्टर और ट्रांसफ़ॉर्म कर सकते हैं। पूरी तरह से IEnumerable<T> इंटरफ़ेस के खिलाफ इसे ऑब्जेक्ट्स के लिए LINQ के रूप में जाना जाएगा, जिसमें क्वेरी में प्रत्येक चरण अंततः एक्सटेंशन विधि के लिए एक साधारण कॉल है।

हालांकि IQueryable<T> लागू करने वाली किसी ऑब्जेक्ट के विरुद्ध चीजें अधिक परिष्कृत हो सकती हैं। IQueryable<T> को लागू करने वाली ऑब्जेक्ट को एक अलग LINQ प्रदाता से जोड़ा जा सकता है जो LINQ क्वेरी के निष्पादन को एक अलग तरीके से कार्यान्वित कर सकता है। उदाहरण के लिए IQueryable<Person> LINQ-To-SQL प्रदाता से जुड़े एक प्रकार द्वारा कार्यान्वित किया जा सकता है। इस मामले में एक LINQ क्वेरी को आइटम्स का एक सेट प्राप्त करने के लिए डेटाबेस के विरुद्ध निष्पादित टी-एसक्यूएल क्वेरी में परिवर्तित किया जाता है (परिणाम आवश्यक रूप से Person ऑब्जेक्ट्स का सेट नहीं हो सकता है)।

+0

सादा सरल अंग्रेजी में सबसे अच्छे उत्तरों में से एक – Edwards

3

IEnumerable का मतलब ओओपी के संदर्भ में कुछ भी नहीं है।

IEnumerable और IEnumerable<T> .NET इंटरफेस हैं जो बस इंगित करते हैं कि अनुक्रम की गणना की जा सकती है। IEnumerable या IEnumerable<T> लागू करने वाली कक्षाएं उस गणना को संभव बनाने के लिए गुण/विधियां प्रदान करती हैं।

उदाहरण के लिए:

IEnumerable<Person> people = GetPeopleFromSomewhere(); 

// iterate through the sequence 
foreach (Person p in people) 
{ 
    Console.WriteLine(p.Name); 
} 

// use LINQ to query the sequence 
var peopleOver30 = people.Where(p => p.Age > 30); 
0

IQueryable फैली IEnumerable और LINQ प्रदाताओं द्वारा कार्यान्वित किया जा करने का इरादा है। आप इस इंटरफ़ेस के माध्यम से किसी भी प्रदाता के खिलाफ प्रश्न निष्पादित कर सकते हैं - यानी अमूर्त दूर diff प्रदाताओं। यह IENumerable बढ़ाता है ताकि क्वेरी के परिणामों को फिर से चालू किया जा सके। जैसे सभी व्यक्ति के ऊपर पाश LastName.equals ("स्मिथ") के साथ वस्तुओं

IEnumerable<People> मतलब यह है कि चर एक वस्तु है कि आप पुनरावृति/व्यक्ति का एक संग्रह से अधिक की गणना/पाश करने की अनुमति देगा के लिए संदर्भित करता वस्तुओं

foreach(Person person in people) 
    Console.WriteLine(person.ToString()); 

यह समझाने के लिए थोड़ा जटिल है (जॉन स्कीट अपनी पुस्तक में इस पर एक महान काम करता है)। आईनेमेरेबल को कार्यान्वित करने वाला एक प्रकार मूल रूप से घोषणा करता है कि मैं आपको एक इनिनेटर ऑब्जेक्ट (GetEnumerator इंटरफ़ेस विधि के माध्यम से) एक आईन्यूमेरेटर इंटरफ़ेस का खुलासा कर सकता हूं, जिसे आप संग्रह में वर्तमान तत्व तक पहुंचने के लिए उपयोग कर सकते हैं और सूची में अगले तत्व पर जाने के लिए MoveNext का उपयोग कर सकते हैं। foreach निर्माण आंतरिक उद्देश्य से अपने उद्देश्य को प्राप्त करने के लिए उपर्युक्त संचालन कहते हैं।
the example in MSDN देखें, अपने आप को एक इटरेटर लागू करें और यह और अधिक स्पष्ट होगा।

0

IEnumerable<T> एक .NET ढांचा प्रकार है। यह सिर्फ अनुक्रम में हेरफेर करने के लिए किसी भी तरीके के बिना तत्वों के एक गणना अनुक्रम का प्रतिनिधित्व करता है। कई प्रकार इस इंटरफ़ेस को कार्यान्वित करते हैं - उदाहरण के लिए ICollection<T>, IList<T>, और BindingList<T> - और आमतौर पर अनुक्रम को केवल पढ़ने के रूप में माना जाना चाहिए, तो इसका उपयोग आमतौर पर किसी क्षेत्र या चर के ठोस प्रकार के बजाय किया जाता है।

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