Junior — Middle
Можете ли да обясните какво представлява патърнът за дизайн на итератор и как се прилага?
sobes.tech AI
Отговор от AI
Шаблонът за дизайн Итератор е предназначен за последователно обхождане на елементите на колекция, без да разкрива нейната вътрешна структура.
Основна идея:
- Итераторът предоставя интерфейс за достъп до елементите на колекцията по един.
- Позволява на клиентския код да преминава през елементите, без да знае как е организирана колекцията вътре.
В C# итераторът се реализира чрез интерфейсите IEnumerator и IEnumerable. Обикновено се използва ключовата дума yield, която улеснява създаването на итератори.
Пример за итератор в C#:
using System;
using System.Collections;
using System.Collections.Generic;
class MyCollection : IEnumerable<int>
{
private int[] data = {1, 2, 3, 4, 5};
public IEnumerator<int> GetEnumerator()
{
foreach (var item in data)
{
yield return item; // връща елементите по един
}
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
class Program
{
static void Main()
{
var collection = new MyCollection();
foreach (var item in collection)
{
Console.WriteLine(item);
}
}
}
Тук MyCollection реализира IEnumerable<int>, което позволява използването на foreach за обхождане на елементите. Итераторът скрива детайлите за съхранението на данните и предоставя прост начин за обхождане.