Читаем C# 4.0 полное руководство - 2011 полностью

В приведенном ниже примере программы интерфейсыIEnumeratorиIEnumerableреализуются в необобщенной форме, с тем чтобы перечислить содержимое массива, инкапсулированного в классеMyClass.

using System;

using System.Collections;

class MyClass : IEnumerator,    IEnumerable {

char[] chrs = {    'А',    'В',    'C',    'D'    };

int idx = -1;

// Реализовать интерфейс IEnumerable. public IEnumerator GetEnumerator    {

return this;

}

// В следующих методах реализуется интерфейс IEnumerator

// Возвратить текущий объект, public object Current { get {

return chrs[idx];

}

}

// Перейти к следующему объекту, public bool MoveNext { if(idx == chrs.Length-1) {

Reset; // установить перечислитель в конец return false;

}

idx++;

f

return true;

}

// Установить перечислитель в начало, public void Reset { idx = -1; }

}

class EnumeratorlmplDemo { static void Main {

MyClass me = new MyClass;

// Отобразить содержимое объекта me. foreach(char ch in me)

Console .Write (ch + 11 11);

Console.WriteLine;

// Вновь отобразить содержимое объекта me. foreach(char ch in me)

Console .Write (ch + 11 ");

Console.WriteLine;

}

}

Эта программа дает следующий результат.

А В С D А В С D

В данной программе сначала создается классMyClass,в котором инкапсулируется небольшой массив типаchar,состоящий из символовА-D.Индекс этого массива хранится в переменнойidx,инициализируемой значением -1. Затем в классеMyClassреализуются оба интерфейса,IEnumeratorиIEnumerable.МетодGetEnumerator возвращает ссылку на перечислитель, которым в данном случае оказывается текущий объект. СвойствоCurrentвозвращает следующий символ в массиве, т.е. объект, указываемый по индексуidx.МетодMoveNext перемещает индексidxв следующее положение. Этот метод возвращает логическое значениеfalse,если достигнут конец коллекции, в противном случае — логическое значениеtrue.Напомним, что перечислитель оказывается неопределенным вплоть до первого вызова методаMoveNext .Следовательно, методMoveNext автоматически вызывается в циклеforeachперед обращением к свойствуCurrent.Именно поэтому первоначальное значение переменнойidxустанавливается равным -1. Оно становится равным нулю на первом шаге циклаforeach.Обобщенная реализация рассматриваемых здесь интерфейсов будет действовать по тому же самому принципу.

Далее в методеMain () создается объекттстипаMyClass,и содержимое этого объекта дважды отображается в циклеforeach.

Применение итераторов

Перейти на страницу:

Похожие книги

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT