Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для TuM0xA
212 / 210 / 137
Регистрация: 21.12.2015
Сообщений: 545

Непонятный момент с IEnumerable

21.01.2017, 00:34. Показов 851. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как это объяснить? неявное наследование от IEnumerable?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections;
class SColl//не наследуемся от IEnumerable 
{
    int[] arr = {1,2,3};
    public IEnumerator GetEnumerator() //если изменить имя, то все поломается
    {
        return arr.GetEnumerator();
    }
}
 
class Program
{
    public static void Main()
    {
        SColl s = new SColl();      
        foreach (int i in s) Console.WriteLine(i);//работает
        Console.ReadKey(true);
    }
}
Добавлено через 11 минут
всё, разобрался. Это называется "утиная типизация"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.01.2017, 00:34
Ответы с готовыми решениями:

Поясните непонятный момент, почему так?
Приветствую всех, вот решал и решил задачу, подсмотрел немного на форуме, и вот что я делаю в коде. На вход метода идет обычное число...

Проверить корректность реализации IEnumerable<T> и IEnumerable
Гуру, выручайте! Разбираюсь в создании обобщенной коллекции и запутался в том, как реализовать интерфейсы IEnumerable&lt;T&gt; и...

Зачем IEnumerable наследоваться от IEnumerable<T>?
/* * Created by SharpDevelop. * User: Admin * Date: 07.09.2018 * Time: 17:26 * * To change this template use Tools |...

1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
21.01.2017, 01:01
Цитата Сообщение от TuM0xA Посмотреть сообщение
как это объяснить? неявное наследование от IEnumerable?
Раздел 8.8.4 спецификации языка — там описано что необходимо для того, чтобы класс можно было использовать как перечисление в foreach.
В частности, если класс не реализует интерфейс IEnumerable/IEnumerable<T>, но в классе имеется метод GetEnumerator, который не принимает никаких значений и возвращает структуру или ссылку на объект, в котором имеется свойство с геттером Current и метод MoveNext, не принимающий значений и возвращающий bool, то экземпляр данного класса можно использовать как перечисление в foreach.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Foo
{
   public Bar GetEnumerator()
   {
      return new Bar();
   }
}
 
struct Bar
{
   public string Current { get { return "Hello!"; } }
 
   private bool moveNext = true;
   public bool MoveNext()
   {
      var t = moveNext;
      moveNext = false;
 
      return t;
   }
}
 
var foo = new Foo();
foreach (var x in foo)
   Console.WriteLine(x);
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.01.2017, 01:01
Помогаю со студенческими работами здесь

Непонятный момент
Здравствуйте.Возник вопрос в задачке.У нас замкнутый контур,в котором батарейка с определенным напряжением через ключ соединена с...

Непонятный момент, замыкания
Почему в замыкании var collectContainer = function () { var food = 'макароны'; var eatDinner = function () { ...

Непонятный момент с комплексными матрицами
Вот задание: Комплексная матрица Z представляется парой X, Y действительных матриц так, что Z=X+iY. Даны действительные квадратные...

Непонятный момент в программе с указателями
Для вывода строки по элементам была написана программа, в которой применялся указатель #include &lt;iostream&gt; void f (char v) ...

Непонятный момент в книге Шилдта
Прощу прощения если что-то не туда пишу, в общем читаю книгу и не могу понять как работает данный код. Полностью профан извините если все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru