miércoles, 10 de marzo de 2010

Iteradores

Los iteradores son una nueva característica en C# 2.0. Un iterador es un método, descriptor de acceso get u operador que proporciona compatibilidad con una iteración foreach en una clase o estructura sin tener que implementar toda la interfaz IEnumerable. En su lugar, se proporciona sólo un iterador, que simplemente recorre las estructuras de datos de la clase. Cuando el compilador detecte el iterador, generará automáticamente los métodos Current, MoveNext y Dispose de la interfaz IEnumerable o IEnumerable.

Información general sobre los iteradores
Un iterador es una sección de código que devuelve una secuencia ordenada de valores del mismo tipo.

Un iterador se puede utilizar como el cuerpo de un método, operador o descriptor de acceso get.

El código del iterador utiliza la instrucción yield return para devolver a su vez cada elemento. yield break finaliza la iteración.

Se pueden implementar varios iteradores en una clase. Cada iterador debe tener un nombre único como cualquier nombre de clase y se puede invocar mediante código de cliente en una instrucción foreach de la manera siguiente: foreach(int x in ClaseEjemplo.Iterator2){}

El tipo de valor devuelto de un iterador debe ser IEnumerable, IEnumerator, IEnumerable o IEnumerator.

La palabra clave yield se utiliza para especificar el valor o valores devueltos. Cuando se llega a la instrucción yield return, se almacena la ubicación actual. La ejecución se reinicia desde esta ubicación la próxima vez que se llame al iterador.

Los iteradores son especialmente útiles con las clases de colección, ya que proporcionan una manera fácil de recorrer en iteración las estructuras de datos no triviales, por ejemplo, los árboles binarios.



Ejemplo
En este ejemplo, la clase DiasDeLaSemana es una clase de colección simple que almacena los días de la semana como cadenas. Después de cada iteración de un bucle foreach, se devuelve la cadena siguiente en la colección.

public class DiasDeLaSemana : System.Collections.IEnumerable
{
string[] Dias = { "Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab" };

public System.Collections.IEnumerator GetEnumerator()
{
for (int i = 0; i < Dias.Length; i++)
{
yield return Dias[i];
}
}
}

class TestDiasDeLaSemana
{
static void Main()
{
// Crear una clase de la clase coleccion
DiasDeLaSemana semana = new DiasDeLaSemana();

// Iterar con foreach
foreach (string dia in semana)
{
System.Console.Write(dia + " ");
}
}
}

Resultado
Dom Lun Mar Mie Jue Vie Sab

7 comentarios:

  1. JN# entonce un iterador vendria siendo como una especie de puntero utilizado para recorrer los elementos almacenados.

    ResponderBorrar
  2. Asi es, pero es mas bien que el iterador se va moviendo de puntero en puntero hasta terminar la colección

    ResponderBorrar
  3. Podemos decir Que un iterador se puede utilizar como el cuerpo de un método, operador o descriptor de acceso get.

    ResponderBorrar
  4. Hola a la usuario Noemi, estuve leyendo este interesante tema y me di cuenta de que su pregunta esta respondida en el primer parrafo de este tema, de hecho dice casi lo mismo que ha preguntado...

    ResponderBorrar
  5. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  6. Profesor la practica mas o menos va a ser asi:

    hacer un celular en Visual C#, que realice las funciones de los números, que realice la función de llamar o cortar, y que al momento de ingresar al menú del celular muestre mi nombre...

    ResponderBorrar
  7. Amigo olvidese de la parte de comunicacion del celuluar y concentrese en lo que tiene su celular en el menu principal: Agenda, mensajes, etc.

    ResponderBorrar

Preguntas;Comentarios;Aportes;Criticas Positivas;Recomendaciones.