IEnumerable { } IEnumerator { Current { }
看我們手動自定義的Student類,以及Student1,StudentEnum類(分別繼承了IEnumerable,IEnumerator接口),上代碼
Student( name, .Name = .Score = students = ( i = ; i < stArray.Length; i++ students[i] = position = - students = position++ position >= students.Length ? : position = - Main( Student[] studentArrary = Student[ Student(, Student(, Student1 studenlist = (Student item Console.WriteLine(item.Name + + }
?
1、一個Collection要支持foreach方式的遍歷,必須實現IEnumerable接口(亦即,必須以某種方式返回IEnumerator object)。
2、IEnumerator object具體實現了iterator(通過MoveNext(),Reset(),Current)。
3、從這兩個接口的用詞選擇上,也可以看出其不同:IEnumerable是一個聲明式的接口,聲明實現該接口的class是“可枚舉(enumerable)”的,但並沒有說明如何實現枚舉器(iterator);IEnumerator是一個實現式的接口,IEnumerator object就是一個iterator。
4、IEnumerable和IEnumerator通過IEnumerable的GetEnumerator()方法建立了連接,client可以通過IEnumerable的GetEnumerator()得到IEnumerator object,在這個意義上,將GetEnumerator()看作IEnumerator object的傳遞方法。