आपको यहां बहुत अच्छे जवाब मिल गए हैं। बस कुछ जोर। एक गणक राज्य रखता है, यह संग्रहित होने वाले संग्रह में वर्तमान वस्तु का ट्रैक रखता है। IENumerator.Current के माध्यम से उपलब्ध है। और यह जानता है कि उस स्थिति को कैसे बदला जाए, IENumerator.MoveNext()। राज्य को रखने के लिए एक अलग वस्तु की आवश्यकता होती है जो राज्य को स्टोर करती है। उस स्थिति को संग्रह ऑब्जेक्ट के अंदर आसानी से संग्रहीत नहीं किया जा सकता है क्योंकि केवल एक संग्रह वस्तु है लेकिन एक से अधिक गणक हो सकते हैं।
मैंने वाक्यांश को "आसानी से" इस्तेमाल किया क्योंकि वास्तव में संग्रह के लिए अपने गणक का ट्रैक रखना संभव है। आखिरकार, यह संग्रह वर्ग 'GetEnumerator() विधि के लिए एक कॉल था जो इटेटरेटर लौटा। .NET ढांचे में एक संग्रह वर्ग है जो यह करता है, माइक्रोसॉफ्ट। VisualBasic.Collection। इसे अपने संग्रह वर्ग के लिए एक वीबी 6 अनुबंध लागू करने की आवश्यकता थी और यह अनुबंध निर्दिष्ट करता है कि गणना के दौरान संग्रह को बदलना कानूनी है। जिसका अर्थ यह है कि जब संग्रह संशोधित होता है, तो इसे बनाए गए सभी इटरेटर ऑब्जेक्ट्स के साथ कुछ उचित करने की आवश्यकता होती है।
वे एक बहुत अच्छी चाल के साथ आए, वीक रेफरेंस इस से प्रेरित हो सकता है। परावर्तक द्वारा दिखाए गए कोड पर एक नज़र डालें। प्रेरणादायक चीजें संग्रह कक्षाओं में कुछ और खोएं और "संस्करण" ढूंढें। बहुत बढ़िया चाल
स्रोत
2010-01-02 23:51:08
+1 को collaped है। यह एक अच्छा उदाहरण है कि इंटरफेस अलग और अलग क्यों हैं। एक और कारण यह है कि एक ही प्रकार के संग्रह को विभिन्न तरीकों से समझा जा सकता है। एक बाइनरी पेड़ की कल्पना करें - आप उपसर्ग, इंफिक्स, पोस्टफिक्स, और चौड़ाई-पहले ट्रैवर्सल (केवल कुछ नाम देने के लिए) कर सकते हैं। इंटरफेस को अलग रखने से एक ही, सरल इंटरफेस के माध्यम से एक ही संरचना पर विभिन्न प्रकार के ट्रैवर्सल किए जाने की अनुमति मिलती है। – LBushkin
आपके उत्तर के लिए धन्यवाद! यह अब मेरे लिए स्पष्ट है। –