Этот длинный заголовок уже содержит все мои вопросы, поэтому я просто хочу привести пример
MyClass[] array
Как этот массив работает с Foreach без реализации метода интерфейса IEnumerable?
Массив реализует IEnumerable. Цитата из документа:
В .NET Framework версии 2.0 Класс Array реализует System.Collections.Generic.IList (Т), System.Collections.Generic.ICollection (Т), а также System.Collections.Generic.IEnumerable (Т) универсальные интерфейсы. реализации предоставляются для массивов во время выполнения, и, следовательно, не видимая в документации сборка инструменты. В результате, общий интерфейсы не отображаются в Синтаксис объявления для массива класс, и нет ссылки темы для членов интерфейса, которые доступно только путем приведения массива к универсальный тип интерфейса (явный реализации интерфейса). Ключ что нужно знать, когда вы разыгрываете массив к одному из этих интерфейсов те члены, которые добавляют, вставляют или удалить элементы бросить NotSupportedException.
Следующее от MSDN
В C # это не обязательно для класса коллекции, чтобы наследовать от IEnumerable и IEnumerator в порядке быть совместимым с foreach. Как долго поскольку у класса есть требуемый GetEnumerator, MoveNext, Reset и Current members , он будет работать с для каждого. Пропуск интерфейсов имеет преимущество, позволяющее вам определить тип возвращаемого значения Current для быть более конкретным, чем объект, который обеспечивает безопасность типов.
foreach не требует от типа для реализации интерфейса IEnumerable, ему просто нужен метод GetEnumerator ().
Тип структуры Array реализует IEnumerable ... поэтому любой массив в .NET (любого типа) реализует IEnumerable.