« Patrons de conception/Itérateur » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 23 :
== Utilisation d'un itérateur explicite ==
 
Dans un langage à objets comme le C#, un itérateur est un objet qui implémente l'interface IEnumerator.
 
<source lang=csharp>
Ligne 33 :
</source>
 
On utilisera alorsutilise l'iterateur pour accéder aux valeurs disponibles.
Une implémentation typique pourra être la suivante
 
<source lang=csharp>
IterateurTypique iterateur = new IterateurTypique ();
iterateur.Reset();
while(iterateur.MoveNext()){
Console.WriteLine(iterateur.Current.ToString());
}
</source>
 
Une des nombreuses implémentations de l'objet possibles peut ressembler à celle-ci.
 
<source lang=csharp>
Ligne 43 ⟶ 54 :
public void Reset() { _positionCourante = -1; }
public bool MoveNext() {
if( _positionCourante + 1 >= _chainesAParcourir.Length ) return false;
return false;
 
_positionCourante +=1;
Ligne 53 ⟶ 63 :
</source>
 
Grace à lL'interface IEnumerable, onde C# permet peutle passerpassage à un itérateur implicite.
On utilisera alors l'iterateur pour accéder aux valeurs disponibles.
 
<source lang=csharp>
IterateurTypique iterateur = new IterateurTypique ();
iterateur.Reset();
while(iterateur.MoveNext()){
Console.WriteLine(iterateur.Current.ToString());
}
</source>
 
Grace à l'interface IEnumerable, on peut passer à un itérateur implicite.
 
<source lang=csharp>
Ligne 72 ⟶ 71 :
</source>
 
Unles typetableaux, dérivélistes deou IEnumerabledictionnaires commede leC# sont lesdes tableaux,types listes,dérivés dictionnairesde enIEnumerable C#et possèdepossèdent une une méthode GetEnumerator() qui appelle l'itérateur explicite. C'est cette méthode GetEnumerator qui est appelée par l'instruction foreach du C#, de manière à obtenir l'objet Current directement à chaque itération.
 
l'instruction foreach du C# appelle cette méthode GetEnumerator() et procède à une itération explicite tout en cachant les détails de l'implémentation.
 
<source lang=csharp>