Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1446 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Теги:
Лекция 10:
Интерфейсы, делегаты, события в C#
Создание нумераторов
Если для перебора внутренних элементов объекта Persons мы попробуем воспользоваться циклом foreach (закомментирован в конструкторе MyClass() ), то получим сообщение об ошибке. Реализация классом Persons интерфейсов IEnumerable и IEnumerator позволяет превратить экземпляр этого класса в коллекцию. Только нужно не забыть присоединить к файлу пространство имен System.Collections, где находятся эти интерфейсы.
using System; using System.Collections; namespace Test { class Person { // Закрытые поля с данными сотрудника string name; // Имя int age; // Возраст // Конструктор по умолчанию public Person() { name = "Петров"; age = 21; } // Конструктор с параметрами public Person(string name, int age) { this.name = name; this.age = age; } // Свойства чтения/записи public string Name { get { return name; } set { name = value; } } public int Age { get { return age; } set { age = value; } } } class Persons : IEnumerable, IEnumerator { // Реализация IEnumerable public IEnumerator GetEnumerator() { return (IEnumerator)this; } // Реализация IEnumerator int pos = -1; // Текущая позиция элемента в массиве public bool MoveNext() { if (pos < personArray.Length - 1) { pos++; return true; } else return false; } public void Reset() { pos = -1; } public object Current { get { return personArray[pos]; } } // Объявляем ссылку-поле на массив сотрудников private Person[] personArray; // Конструктор public Persons() { personArray = new Person[]{ new Person("Иванов",20), new Person(),// По умолчанию Person("Петров", 21) new Person("Сидоров", 22) }; } // Свойство-индексатор public Person this[int index] { get { if (index < 0) return personArray[0]; else if (index > personArray.Length - 1) return personArray[personArray.Length - 1]; else return personArray[index]; } set { if (index < 0) personArray[0] = value; else if (index > personArray.Length - 1) personArray[personArray.Length - 1] = value; else personArray[index] = value; } } // Количество сотрудников public int Length { get { return personArray.Length; } } } // Вызывающая сторона class MyClass { public MyClass() { // Создаем список сотрудников Persons pers = new Persons(); // Выводим информацию о сотрудниках по индексатору Console.WriteLine("Список сотрудников:"); for (int i = 0; i < pers.Length; i++) Console.WriteLine("{2}) {0}, возраст {1}", pers[i].Name, pers[i].Age, i + 1); //* Нужно реализовать интерфейсы IEnumerable, IEnumerator Console.WriteLine("\nЕще один список сотрудников:"); int j = 0; foreach (Person per in pers) Console.WriteLine("{2}) {0}, возраст {1}", per.Name, per.Age, j = j + 1); //*/ } } // Запуск class Program { static void Main() { // Настройка консоли Console.Title = "Применение индексаторов"; Console.ForegroundColor = ConsoleColor.White; Console.CursorVisible = false; Console.WindowWidth = 30; Console.WindowHeight = 10; new MyClass();// Чтобы сработал конструктор Console.ReadLine(); } } }Листинг 10.7 . Класс Persons как коллекция объектов Person