Algoritm pdf


IEnumerator-ning umumiy versiyasi


Download 292.61 Kb.
Pdf ko'rish
bet5/7
Sana17.12.2022
Hajmi292.61 Kb.
#1025440
1   2   3   4   5   6   7
Bog'liq
algoritm

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 292.61 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