zrozumienie IEnumerable <T> w C #

Próbuję zrozumiećIEnumerable interfejs w C #. Jak podano wMSDN
IEnumerable 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!

questionAnswers(1)

yourAnswerToTheQuestion