Yield return: qaytish elementini belgilaydi yield break


IEnumerator-ning umumiy versiyasi


Download 63.55 Kb.
bet5/7
Sana24.12.2022
Hajmi63.55 Kb.
#1062569
1   2   3   4   5   6   7
Bog'liq
tsfcsOQYNmo1EkP9FeO7k5euCfrh5g2v

IEnumerator-ning umumiy versiyasi
Yuqoridagi misollarda interfeyslarning umumlashtirilmagan versiyalari ishlatilgan, ammo biz ularning umumlashtirilgan juftliklaridan ham foydalanishimiz mumkin:
using System.Collections;
class WeekEnumerator : IEnumerator
{
string[] days;
int position = -1;
public WeekEnumerator(string[] days) => this.days = days;
public string Current
{
get
{
if (position == -1 || position >= days.Length)
throw new ArgumentException();
return days[position];
}
}
object IEnumerator.Current => throw new NotImplementedException();
public bool MoveNext()
{
if (position < days.Length - 1)
{
position++;
return true;
}
else
return false;
}
public void Reset() => position = -1;
public void Dispose() { }
}
class Week
{
string[] days = { "Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday" };
public IEnumerator GetEnumerator() => new WeekEnumerator(days);
}
Bunday holda, biz IEnumerator interfeysini amalga oshiramiz, mos ravishda joriy mulkda biz string ob'ektini qaytarishimiz kerak. Bunday holda, foreach loopida takrorlanganda, saralangan ob'ektlar avtomatik ravishda string turini aks ettiradi:
Week week = new Week();
foreach (string day in week)
{
Console.WriteLine(day);
}

Итератор (Iterator)
Naqsh iterator (Iterator) kompozit ob'ektning barcha elementlariga uning ichki tuzilishini oshkor qilmasdan ketma-ket kirish uchun mavhum interfeysni taqdim etadi.
Ehtimol, C# tili bilan ishlaydigan barcha dasturchilar massiv yoki to'plamdagi ob'ektlarni takrorlaydigan foreach tsikli bilan shug'ullanishlari kerak edi. Shu bilan birga, to'plamlarning ko'plab o'rnatilgan sinflari mavjud va ularning har biri tuzilishi va xatti-harakatlarida farq qiladi.
Foreach-dan foydalangan holda to'plamlarni sanab o'tishga imkon beradigan asosiy narsa bu to'plamlar sinflari tomonidan iterator naqshini yoki sodda qilib aytganda, IEnumerable / IEnumerator interfeyslarini qo'llashdir. IEnumerator interfeysi konteynerdagi ichki ob'ektlarni qidirish funktsiyasini belgilaydi:
public interface IEnumerator
{
bool MoveNext(); // перемещение на одну позицию вперед в контейнере элементов
object Current {get;} // текущий элемент в контейнере
void Reset(); // перемещение в начало контейнера
}
A IEnumerable interfeysi ma'lum bir ob'ekt turi uchun iteratorni olish uchun IEnumerator-dan foydalanadi:
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
Ushbu interfeyslardan foydalanib, biz bitta naqshga - foreach loopidan foydalanib - har qanday kompozit ob'ektlarni qisqartirishimiz mumkin.

Download 63.55 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling