КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Дейтсвие - описать ИТЕРАТОР!!!
Итератор – блок кода программы, задающий последовательность перебора элементов объекта. На каждом проходе цикла foreach выполняется один шаг итератора, заканчивающийся выдачей очередного значения с помощью ключевого слова yield. Перебор элементов (интерфейс IEnumerable) и итераторы Оператор foreach является удобным средством для перебора эелемнтов объекта. Массивы и все коллекции позволяют выполнять такой перебор благодаря тому, что в них реализованы интерфейсы IEnumerable и IEnumerator. Для применения оператора foreach к собсвенному типу данных требуется реализовать в нем эти итераторы. Интерфейс IEnumerable (перечислимый) определяет единственный метод GetEnumerator(), возвращающий объект типа IEnumerator (перечислитель), который можно использовать для просмотра элементов объекта. Интерфейс IEnumerator задает три элемента:
Цикл foreach использует эти методы для перебора элементов, из которых состоит объект. Таким образом, для того, чтобы применить цикл foreach необходимо реализовать четыре метода GetEnumerator(), Current, MoveNext() и Reset(). Например, если элементы класса организованы как массив, необходимо описать закрытое поле класса, хранящее текущий индекс в массиве, в методе MoveNext() задать изменение этого индекса на 1 и проверку выхода за границу массива, а в свойстве Current – возврат элемента массива по текущему индексу. В языке С# имеются стандартные средства, обеспечивающие аналогичные действия, которые выполняют перебор элементов в объекте – итераторы. Пример работы класса с итератором using System; using System.Collections; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Monster { public Monster(int сила, int умение, string имя) { this.сила = сила; this.умение = умение; this.имя = имя; } public virtual void Passport() { Console.WriteLine("Монстр {0} сила = {1} умение= {2}", имя, сила, умение); } public int Сила { get { return сила; } set { if (value > 0) сила = value; else сила = 0; } } public int Умение { get { return умение; } set { if (value > 0) умение = value; else умение = 0; } } public string Имя { get { return имя; } }
string имя; int сила, умение; } //производный класс от монстра – демон, умеющий “думать” class Daemon: Monster { public Daemon(int сила, int умение, string имя, int ум) : base(сила, умение, имя) { this.ум = ум; } public override void Passport() { Console.WriteLine("Демон {0} сила = {1} умение {2} ум = {3}", Имя, Сила, Умение, ум); } public void Think() { Console.Write(Имя + "это "); for (int i = 0; i < ум; i++) Console.Write(" думает "); Console.WriteLine("..."); } int ум; } class Mas_Monster: IEnumerable //1 дейтсвие –класс реализует интерфейс IEnumerable { Monster[] mas; int n; public Mas_Monster() { mas = new Monster[10]; n = 0; } public IEnumerator GetEnumerator() { for (int i = 0; i < n; i++) yield return mas[i]; //ЭТО- ИТЕРАТОР!!! } public void Add(Monster m) { if (n >= 10) return; mas[n] = m; n++; } }
class Program { static void Main(string[] args) { //демонстрация работы с производным классом Daemon D = new Daemon(50, 50, "Дима", 3); D.Passport(); D.Think();
Дата добавления: 2014-01-20; Просмотров: 1231; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |