Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 112

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 106 107 108 109 110 111 < 112 > 113 114 115 116 117 118 .. 404 >> Следующая


((Chicken)animalArray[1]) .LayEggO ;

Семейство ArrayList — это семейство объектов класса System.Object (мы присвоили ему объекты Animal, воспользовавшись полиморфизмом). Это значит, что необходимо выполнить приведение типа для всех его элементов:

((Animal)animalArrayList[0]).Feed О;

((Chicken)animalArrayList [11) .LayEggO ;

В оставшейся части кода используются некоторые особенности семейства Animal, которые отсутствуют у семейства Array.

Во-первых, МОЖНО удалять элементы С ПОМОЩЬЮ методов Remove о И RemOveAt О , которые являются составной частью реализации класса ArrayList. Эти методы производят удаление элемента из массива по ссылке и по индексу соответственно. В нашем примере для удаления первого включенного в список элемента — объекта класса cow, свойство Name которого имеет значение 'Hayley* — используется второй метод:

animalArrayList.RemoveAt(0);

В качестве альтернативы можно было бы применить следующий код:

aniraalArrayList. Remove (myCow2} j

Поскольку на этот объект уже имеется локальная ссылка, то существующую ссылку мы добавили в массив вместо того, чтобы создавать новый объект.

Как бы то ни было, единственным элементом, оставшимся в семействе, является объект класса chicken, доступ к которому мы осуществляем следующим образом:

((Aniiral) animalArrayList [01) . Feed О ;

Выполнение любых операций над элементами объекта ArrayList, в результате которых в этом массиве останется N элементов, будет производиться таким образом, что этим элементам будут соответствовать индексы в диапазоне от 0 до n-1.
234

Глава 11

Так, напрнмер, удаление элемента с номером 0 приводит к тому, что все остальные элементы сдвигаются в массиве на одну позицию, поэтому доступ к объекту класса Chicken осуществляется с индексом 0, а не 1. А поскольку теперь в массиве не существует элемента с индексом 1 (с самого начала было всего два элемента), то прн попытке выполнить следующий код будет сгенерирована исключительная ситуация:

1(Ап1лд1)animalArrayList[1]) .FeedO;

Семейства ArrayList позволяют добавлять сразу по несколько элементов с помощью метода AddRangeO. Этому методу может передаваться произвольный объект, Обладающий интерфейсом ICollection, В КОТОрЫЙ ВХОДИТ MaCCHB animalArray;

animalArrayList.AddRange(animalArray);

Теперь для подтверждения того, что это работает, мы можем попытаться осуществить доступ к третьему элементу семейства, который будет являться вторым элементом В anirnalArray:

((Chicken)animalArrayList[2]). LayEgg();

Метод AddRange() не является частью ни одного из интерфейсов, предоставляемых классом ArrayList. Этот метод присущ именно классу ArrayList н демонстрирует тот факт, что в классах семейств мы можем описывать определяемое пользователем поведение, которое далеко выходит за рамки рассмотренных выше интерфейсов. Этот класс предоставляет также множество других интересных интерфейсов, например, insertRangeO, который позволяет вставлять массив объектов в любую точку списка, а также методы для выполнения таких задач, как сортировка и изменение порядка следования элементов,

Наконец, мы вновь задействуем возможность использовать несколько ссылок на один и тот же объект. Применив метод indexof о, являющийся частью интерфейса IList, мы можем узнать не только то, что теперь объект mycowi (который мы изначально добавили К массиву animalArray) входит В семейство animalArrayList, НО также и каков его индекс:

Console.WriteLine!'The animal called (0) is at index (1).', myCowl.Name, animalArrayList.IndexOf(myCowl));

Следующие две строки кода переименовывают объект с помощью ссылки на него и выводят новое имя на экран, используя для этого ссылку семейства:

iriyCowl, Name = 'Janice';

Console.WriteLine('The animal is now called (0),',

((Animal)animalArrayList[1]).Name);

Определение семейств

Теперь, когда мы познакомились с теми возможностями, которые предоставляются прн использовании более сложных классов семейств, настала пора узнать, каким образом можно создавать собственные строго типизированные семейства. Один из способов — это реализовать все необходимые методы вручную, однако такой подход может потребовать очень больших затрат времени, а в некоторых случаях оказаться чрезвычайно сложным. В качестве альтернативы существует возможность создать семейство, являющееся производным от некоторого класса, например, ОТ System.Collections.CollectionBaae — абстрактного класса, В котором реализована большая часть семейств. Мы рекомендуем использовать именно такой способ.
Дополнительные сведения о классах

235

Класс CollectionBase предоставляет интерфейсы IEnumerable, ICollection и iLiat, однако в них реализованы только некоторые из необходимых методов, а именно методы clear о н RemoveAt () интерфейса IList, а также свойство count интерфейса ICollection. Если возникает необходимость в каких-либо дополнительных функциональных возможностях, то нх приходится реализовывать самостоятельно.

Для этого в классе CollectionBase предусмотрено два защищенных свойства, которые позволяют осуществлять доступ собственно к хранящимся объектам. Можно воспользоваться свойством List — оно обеспечивает доступ к элементам посредством интерфейса IList, и свойством innerList — оно является объектом ArrayList и используется для хранения элементов.
Предыдущая << 1 .. 106 107 108 109 110 111 < 112 > 113 114 115 116 117 118 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.