Junior — Middle
Czy możesz wyjaśnić, na czym polega wzorzec projektowy iteratora i jak jest stosowany?
sobes.tech AI
Odpowiedź od AI
Wzorzec projektowy Iterator służy do sekwencyjnego przechodzenia przez elementy kolekcji bez ujawniania jej wewnętrznej struktury.
Główna idea:
- Iterator zapewnia interfejs do dostępu do elementów kolekcji po jednym.
- Umożliwia kodowi klienta przechodzenie przez elementy, nie znając, jak dokładnie kolekcja jest zorganizowana wewnątrz.
W C# iterator jest implementowany za pomocą interfejsów IEnumerator i IEnumerable. Zazwyczaj używa się słowa kluczowego yield, które upraszcza tworzenie iteratorów.
Przykład iteratora w 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; // zwraca elementy po jednym
}
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
class Program
{
static void Main()
{
var collection = new MyCollection();
foreach (var item in collection)
{
Console.WriteLine(item);
}
}
}
Tutaj MyCollection implementuje IEnumerable<int>, co pozwala na użycie foreach do przechodzenia po elementach. Iterator ukrywa szczegóły przechowywania danych i zapewnia prosty sposób ich iteracji.