Introducción: Recorrer sin conocer
Iterator permite recorrer una colección sin exponer su estructura interna, manteniendo la encapsulación intacta. Gracias a esto, puedes cambiar el tipo de colección o su implementación interna sin romper el código que itera.

Prompt: Path with stepping stones, minimal landscape style.
1. Naturaleza: Migración por etapas
Las aves migran siguiendo etapas. Cada paso es un "next" natural y no necesitan conocer el mapa completo para avanzar.
La ruta se divide en tramos, con descansos y puntos de referencia; el iterador funciona igual: solo expone el siguiente elemento y oculta el resto del recorrido.

Prompt: Birds flying in formation, calm sky, nature documentary style.
2. Mundo Real: Playlists
Una playlist te permite ir canción por canción sin saber cómo están almacenadas. Da igual si vienen de un archivo local, streaming o caché: el control de reproducción no cambia.
Ese desacoplamiento es el corazón del Iterator: el cliente solo usa Next y HasNext (o MoveNext) y el detalle de almacenamiento queda encapsulado.

Prompt: Music player UI with next/prev buttons, modern flat design.
3. Implementación en C#: Código Paso a Paso
public class Coleccion
{
private List _items = new() { "A", "B", "C" };
public IEnumerator GetEnumerator() => _items.GetEnumerator();
}
// Uso
var coleccion = new Coleccion();
foreach (var item in coleccion) Console.WriteLine(item);
4. Iterator vs Foreach
foreach usa internamente el patrón Iterator (IEnumerator), pero el patrón te permite crear recorridos personalizados (filtrados, orden inverso, paginación).
Cuando necesitas más control que el recorrido estándar, un iterador explícito te da la libertad de definir reglas de navegación sin cambiar la colección.
5. Diagrama UML

Prompt: UML diagram of Iterator pattern, clean vector layout.

Prompt: Iteration flow diagram, minimal infographic style.
⚠️ Cuándo NO Usar Iterator
- Si la colección es trivial y no necesitas abstracción.
- Si el recorrido es siempre el mismo y un
foreachbasta. - Si el costo de crear iteradores supera la complejidad del problema.
💪 Ejercicio
Crea un iterador para recorrer una matriz en diagonal. Agrega una versión que permita elegir el punto de inicio y el sentido (↘︎ o ↗︎).
Conclusión
Iterator hace que recorrer colecciones sea uniforme y seguro, protegiendo la estructura interna. Es una herramienta clave cuando quieres flexibilidad de recorrido sin acoplar al cliente.