سؤال

ممكن مكررة:
يمكن لأي شخص أن يشرح IEnumerable IEnumerator لي ؟

ما هي الاختلافات بين IEnumerator و IEnumerable?

هل كانت مفيدة؟

المحلول

IEnumerable هو واجهة التي تحدد أسلوب واحد GetEnumerator والتي ترجع IEnumerator واجهة ، وهذا بدوره يسمح للقراءة فقط الوصول إلى مجموعة.المجموعة التي تنفذ IEnumerable يمكن استخدامها مع بيان foreach.

تعريف

IEnumerable 

public IEnumerator GetEnumerator();

IEnumerator

public object Current;
public void Reset();
public bool MoveNext();

رمز المثال من codebetter.com

نصائح أخرى

وهو IEnumerator هو الشيء الذي يمكن أن تعداد:فقد Current مكان الإقامة ، MoveNext و Reset الطرق (التي في .صافي رمز ربما لن ندعو صراحة, على الرغم من أنك يمكن أن).

وهو IEnumerable هو الشيء الذي يمكن حصرها...وهو ما يعني ببساطة أن لديها GetEnumerator الأسلوب بإرجاع كائن IEnumerator.

التي تستخدمها ؟ السبب الوحيد لاستخدام IEnumerator إذا كان لديك شيء له غير قياسي طريقة تعداد (وهذا هو ، من العودة مختلف العناصر واحدا تلو الآخر), و تحتاج إلى تحديد كيف يعمل.كنت إنشاء فئة جديدة تنفيذ IEnumerator.ولكن كنت لا تزال في حاجة إلى إعادة ذلك IEnumerator في IEnumerable فئة.

لإلقاء نظرة على ما العداد (تنفيذ IEnumerator<T>) يبدو ، Enumerator<T> فئة ، مثل تلك الواردة في List<T>, Queue<T>, أو Stack<T>.نظرة فئة التنفيذ IEnumerable, انظر أي معيار جمع الصف.

وهو Enumerator يظهر لك العناصر في قائمة أو مجموعة.كل مثيل العداد هو في موقف معين (1 العنصر ، 7 عنصر ، الخ) و يمكن أن تعطيك هذا العنصر (IEnumerator.Current) أو الانتقال إلى المرحلة التالية (IEnumerator.MoveNext).عند كتابة foreach حلقة في C# ، ينشئ برنامج التحويل البرمجي التعليمات البرمجية التي تستخدم العداد.

وهو Enumerable هو الدرجة التي يمكن أن تعطيك Enumerators.فمن لديه طريقة تسمى GetEnumerator الذي يتيح لك Enumerator التي تبدو في بنودها.عند كتابة foreach حلقة في C# رمز أنه يولد المكالمات GetEnumerator لخلق Enumerator المستخدمة من قبل الحلقة.

IEnumerable IEnumerator هي كل الواجهات.IEnumerable لديه أسلوب واحد فقط يسمى GetEnumerator.هذا الأسلوب retuns (كما جميع طرق العودة شيء بما في ذلك الفراغ) نوع آخر الذي هو واجهة و أن واجهة IEnumerator.عند تنفيذ العداد المنطق في أي مجموعة الفئة تنفيذ IEnumerable (إما عامة أو غير عامة).IEnumerable لديه أسلوب واحد فقط في حين IEnumerator 2 طرق (MoveNext و إعادة تعيين) و خاصية الحالي.لسهولة فهم يعتبرون IEnumebale المربع الذي يحتوي على IEnumerator داخله (ولكن ليس عن طريق الوراثة أو الاحتواء).انظر الرمز من أجل فهم أفضل:

    class Test : IEnumerable, IEnumerator
    {
         IEnumerator IEnumerable.GetEnumerator()
        {
            throw new NotImplementedException();
        }

        public object Current
        {
            get { throw new NotImplementedException(); }
        }

        public bool MoveNext()
        {
            throw new NotImplementedException();
        }
        public void Reset()
        {
            throw new NotImplementedException();
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top