Diferencia entre corriente y contador

Antes de saltar a la diferencia entre IEnumerable e IEnumerator, primero comprendamos los términos Enumerator y Enumerable y cuándo y por qué deben usarse.

Enumerable es un módulo utilizado en la clase Array que le proporciona Enumerator. La clase en sí no implementa todos los métodos. De hecho, utiliza un método llamado ‘GetEnumerator’ que le brinda un Enumerador para recuperar su elemento.

Un enumerador es un objeto que devuelve todos los elementos de una colección en un orden particular, exactamente como se solicitó. El compilador genera código que usa un contador cuando escribe un bucle foreach en C#.

IEnumerator es una interfaz que implementa el enumerador y la clase enumerable implementa la interfaz IEnumerable.

¿Qué es Enumerable?

IEnumerable es una interfaz básica utilizada para obtener un objeto que sabe cómo enumerar (o iterar) los elementos de la colección.

Es la implementación del patrón de iteración lo que proporciona un mecanismo para atravesar un objeto en la colección, independientemente de su estructura interna. La interfaz de enumeración representa un objeto iterable en una colección.

Solo usa un método «GetEnumerator» que devuelve una instancia de clase de enumerador que implementa la interfaz IEnumerator.

¿Qué es un Ienumerator?

La interfaz IEnumerator, por otro lado, declara dos métodos – Reset ( ) y MoveNext ( ) – y una propiedad, Current. MoveNext ( ) devuelve un valor booleano que indica el final de la lista y ayuda a posicionar el primer elemento en la lista después de llamar al método Reset ( ): establece el contador en su posición predeterminada para que la lista se pueda iterar desde el principio lista.

La propiedad actual solo puede ser llamada por una instancia de la interfaz IEnumerator y devuelve el elemento actual en la lista.

Descubre también la:  Diferencia entre WPS y PQR

Diferencia entre IEnumerable e IE-Enumerator

Los fundamentos de contar y el enumerador

Tanto IEnumerable como IEnumerator son interfaces que juntas implementan el patrón de diseño de software iterador en .Net Framework. .Net Framework permite el acceso a elementos individuales en la colección personalizada al implementar las interfaces IEnumerable e IEnumerator. La interfaz IEnumerable declara solo un método llamado GetEnumerator que devuelve otro tipo de interfaz llamado interfaz IEnumerator para esa colección en particular. Por otro lado, IEnumerator es la interfaz base para todos los enumeradores que no son de tipo utilizados para leer los datos de la colección. Sin embargo, los contadores no se pueden usar para modificar la colección base.

Métodos

La interfaz Ienumerable define solo un método GetEnumerator ( ), que es un método de instancia utilizado en varios tipos de colección diferentes. Obtiene un iterador IEumerator que se puede usar para iterar sobre todos los valores de la colección. Cuando escribe un bucle foreach en C#, el código que genera llama al método GetEnumerator para crear el enumerador utilizado por el bucle.

IEnumerator, por otro lado, usa dos métodos MoveNext ( ) y Reset ( ) y una propiedad Current. El método MoveNext ( ) lleva el contador al siguiente elemento de la colección, mientras que el método Reset ( ) establece el contador en su posición predeterminada, que está antes del primer elemento de la colección.

Implementación

IEnumerable es una interfaz genérica que proporciona una abstracción para elementos de bucle y, al implementar la interfaz IEnumerable, una clase genérica puede iterar esencialmente a través de la interfaz IEnumerator. Al hacerlo, estas clases proporcionan una interfaz común a una instancia de un enumerador find que admita el conjunto básico de métodos de navegación.

IEnumerator es la interfaz base para enumeradores y el uso de la interfaz IEnumerable requiere que la clase implemente Enumerator. Ambas interfaces deben implementarse, si desea brindar soporte para foreach. La clase abstracta ‘AbstractEnumerator’ implementa la interfaz IEnumerator.

Descubre también la:  Diferencia entre dirección lógica y dirección física

Funcionalidad del enumerador y del enumerador

La interfaz de IEnumerable, así como la interfaz de soporte de IEnumerator, le permite iterar sobre los elementos en la pila usando la instrucción ‘foreach’. Es la interfaz básica utilizada para objetos de tipo colección. La iteración comienza con el elemento superior de la pila y termina con el elemento más antiguo de la pila. En pocas palabras, representa algo que se puede contar.

Junto con la interfaz IEnumerator, permiten iterar los elementos de ArrayList de forma estandarizada y secuencial, comenzando con el primer elemento y continuando. La instrucción foreach utiliza los métodos y propiedades de la interfaz IEnumerator para iterar a través de cada elemento de una colección.

calculadora contra Calculadora:

Resumen de los versos IEnumerable IEnumerator

En resumen, tanto IEnumerable como IEnumerator son interfaces que se utilizan para enumerar o iterar sobre una clase que tiene la naturaleza de una colección, lo que significa que facilitan el acceso iterativo en una colección personalizada. IEnumerable es la interfaz genérica disponible para objetos de tipo colección y, al implementar la interfaz IEnumerable, una clase genérica esencialmente permite la iteración a través de la interfaz IEnumerator. Utiliza solo un método GetEnumerator que devuelve una instancia de una clase de enumerador que implementa la interfaz IEnumerator. La interfaz de IEnumerator está pensada para usarse como elementos de acceso y no se puede usar para modificar la colección subyacente. Proporciona dos métodos abstractos Reset ( ) y MoveNext ( ), y una propiedad Current para llamar a un elemento específico en una colección.

Wlip.es

Somos entusiastas de la tecnología, la ciencia y sus avances. Nuestra curiosidad nunca se sacia y por eso intentamos investigar y conocer cada día más cosas. Te traemos las diferencias más curiosas sobre conceptos, cosas y mucho más.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *