ما هو الفرق بين IEnumerator و IEnumerable?[مكررة]
-
03-07-2019 - |
سؤال
ممكن مكررة:
يمكن لأي شخص أن يشرح IEnumerable IEnumerator لي ؟
ما هي الاختلافات بين IEnumerator و IEnumerable?
المحلول
IEnumerable هو واجهة التي تحدد أسلوب واحد GetEnumerator والتي ترجع IEnumerator واجهة ، وهذا بدوره يسمح للقراءة فقط الوصول إلى مجموعة.المجموعة التي تنفذ IEnumerable يمكن استخدامها مع بيان foreach.
تعريف
IEnumerable
public IEnumerator GetEnumerator();
IEnumerator
public object Current;
public void Reset();
public bool MoveNext();
نصائح أخرى
وهو 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
هو الدرجة التي يمكن أن تعطيك Enumerator
s.فمن لديه طريقة تسمى 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();
}
}