zrozumienie IEnumerable <T> w C #
Próbuję zrozumiećIEnumerable
interfejs w C #. Jak podano wMSDNIEnumerable
eksponuje moduł wyliczający, który obsługuje prostą iterację w nie-ogólnej kolekcji. To jest całkiem proste. Kiedy mamy kolekcję, która implementuje ten interfejs, otrzymujemy moduł wyliczający, który implementujeIEnumerator
interfejs (http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.getenumerator(v=vs.110).aspx) i używając tego modułu wyliczającego możemy iterować przez wszystkie elementy kolekcji w sposób podobny do poniższego:
foreach(var item in items)
{
// code goes here
}
W powyższym fragmencie koduitems
to kolekcja, która implementujeIEnumerable
berło. Jest to możliwe, ponieważ moduł wyliczający ma właściwość o nazwieCurrent
, który zawiera bieżący element kolekcji i metodęMoveNext
, który jest używany przez moduł wyliczający, aby przejść do następnego elementu. Wreszcie, ma metodę zwanąReset
, który ustawia moduł wyliczający na jego początkową pozycję, która znajduje się przed pierwszym elementem w kolekcji, tak jak jest to określone w MSDN.
Pozwól nam mieć następujący fragment kodu:
int[] array = new int[10] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
IEnumerable<int> numbers = array;
foreach (var number in numbers)
{
Console.WriteLine(number);
}
W powyższym fragmencie kodu inicjalizujemy tablicę liczb całkowitych, a następnie definiujemy typIEnumerable
to wskazuje tablicę. Odnumbers
implementujeIEnumerable
, możemy iterować po elementach za pomocą powyższegoforeach
.
Myślę, że kompilator za kulisami emituje jakiś kod, gdy definiujemynumbers
a następnie spróbuj przejść przez jego elementy. Właściwie to znalazłemArray
narzędziaIEnumerable<T>
.
Moje pytanie jest za każdym razem, gdy definiujemy tablicę, ponieważ tablica jest obiektem, który implementujeIEnumerable
iIEnumerator
, odpowiednie metody są implementowane przez kompilator?
Z góry dziękuję za wszelką pomoc!