Différence entre IEnumerable et IEnumerator

Avant d’aborder la différence entre IEnumerable et IEnumerator, il convient de comprendre les termes Enumerator et Enumerable et de savoir quand et pourquoi les utiliser.

Enumerable est un module utilisé dans la classe Array qui vous donne Enumerator. La classe elle-même n’a pas de méthode. En fait, elle utilise une méthode appelée « GetEnumerator » qui vous donne un Enumerator pour récupérer son élément.

Un énumérateur est un objet qui renvoie chaque élément d’une collection dans un ordre spécifique, exactement comme il a été demandé. Le compilateur génère un code qui utilise un énumérateur lorsque vous écrivez une boucle foreach en C#.

IEnumerator est une interface implémentée par un énumérateur et la classe enumerable implémente l’interface IEnumerable.

Qu’est-ce que Ienumerable ?

IEnumerable est une interface de base utilisée pour obtenir un objet qui sait énumérer (ou itérer) les éléments d’une collection.

Il s’agit d’une implémentation du modèle d’itérateur qui fournit un mécanisme permettant de parcourir un objet de la collection indépendamment de sa structure interne. L’interface IEnumerable représente un objet qui peut être parcouru dans une collection.

Elle n’utilise qu’une seule méthode, « GetEnumerator », qui renvoie une instance de classe d’énumérateur implémentant l’interface IEnumerator.

Qu’est-ce que Ienumerator ?

L’interface IEnumerator, quant à elle, déclare deux méthodes – Reset ( ) et MoveNext ( ) – et une propriété, Current. MoveNext ( ) renvoie une valeur booléenne qui indique la fin de la liste et aide à positionner le premier élément de la liste après l’appel à la méthode Reset ( ) – elle place l’énumérateur à sa position par défaut afin de réitérer la liste depuis le début.

La propriété Current ne peut être appelée que par une instance de l’interface IEnumerator et renvoie l’élément actuel de la liste.

Différence entre IEnumerable et IEnumerator

Notions de base sur IEnumerable et Ienumerator

IEnumerable et IEnumerator sont des interfaces qui mettent en œuvre le modèle de conception de logiciel itérateur dans le cadre .Net. Le .Net Framework permet d’accéder à des éléments individuels dans la collection personnalisée en mettant en œuvre les interfaces IEnumerable et IEnumerator. L’interface IEnumerable ne déclare qu’une seule méthode appelée GetEnumerator qui renvoie un autre type d’interface appelé interface IEnumerator pour cette collection particulière. L’interface IEnumerator, quant à elle, est l’interface de base pour tous les énumérateurs non génériques utilisés pour lire les données de la collection. Cependant, les énumérateurs ne peuvent pas être utilisés pour modifier la collection sous-jacente.

Méthodes

L’interface IEnumerable ne définit qu’une seule méthode, GetEnumerator ( ), qui est une méthode d’instance utilisée pour différents types de collections. Elle permet d’obtenir un itérateur IEnumerator qui peut être utilisé pour parcourir toutes les valeurs de la collection. Lorsque vous écrivez une boucle foreach en C#, le code qu’elle génère appelle la méthode GetEnumerator pour créer l’énumérateur utilisé par la boucle.

IEnumerator, quant à lui, utilise deux méthodes MoveNext ( ) et Reset ( ) ainsi qu’une propriété Current. La méthode MoveNext ( ) amène l’énumérateur à l’élément suivant de la collection, tandis que la méthode Reset ( ) ramène l’énumérateur à sa position par défaut, c’est-à-dire avant le premier élément de la collection.

Mise en œuvre

IEnumerable est une interface générique qui fournit une abstraction pour le bouclage d’éléments. En implémentant l’interface IEnumerable, une classe générique permet essentiellement l’itération via l’interface IEnumerator. Ce faisant, ces classes finissent par fournir une interface commune pour récupérer une instance d’un objet IEnumerator qui prend en charge l’ensemble des méthodes de navigation de base.

IEnumerator est l’interface de base pour les énumérateurs et l’utilisation de l’interface IEnumerable exige que la classe implémente IEnumerator. Les deux interfaces doivent être implémentées si vous souhaitez prendre en charge la fonction foreach. La classe abstraite « AbstractEnumerator » met en œuvre l’interface IEnumerator.

Fonctionnalité de IEnumerable et IEnumerator

L’interface IEnumerable, ainsi que l’interface IEnumerator qui l’accompagne, vous permet d’itérer sur les éléments de la pile à l’aide de l’instruction « foreach ». Il s’agit de l’interface de base utilisée pour les objets de type collection. L’itération commence par l’élément le plus haut de la pile et se termine par l’élément le plus ancien de la pile. En d’autres termes, elle représente un objet qui peut être énuméré.

Avec l’interface IEnumerator, ils permettent d’itérer les éléments de la liste de tableaux d’une manière normalisée et séquentielle, en commençant par le premier élément et en continuant. L’instruction foreach utilise les méthodes et les propriétés de l’interface IEnumerator pour parcourir tous les éléments d’une collection.

Résumé de IEnumerable par rapport à IEnumerator

En résumé, les interfaces IEnumerable et IEnumerator sont toutes deux utilisées pour énumérer ou itérer une classe ayant une nature de collection, ce qui signifie qu’elles facilitent l’accès itératif à une collection personnalisée. IEnumerable est l’interface générique disponible pour les objets de type collection et en implémentant l’interface IEnumerable, une classe générique permet essentiellement l’itération via l’interface IEnumerator. Elle n’utilise qu’une seule méthode, GetEnumerator, qui renvoie une instance de classe d’énumérateur mettant en œuvre l’interface IEnumerator. L’interface IEnumerator est destinée à être utilisée en tant qu’accesseur et ne peut pas être utilisée pour modifier la collection sous-jacente. Elle fournit deux méthodes abstraites Reset ( ) et MoveNext ( ), ainsi qu’une propriété Current permettant d’appeler un élément particulier d’une collection.