Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 94

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 88 89 90 91 92 93 < 94 > 95 96 97 98 99 100 .. 320 >> Следующая

должен бытьзамещен метод
System.Object.GetHashCode()
Collection, ICIoneable
и lEnumerable
ICollection,
и ICIoneable
ICollection и lEnumerable
Пространство имен System.Collections.Specialized
Если ни один из клялто». представленных в пространстве имен System. Coll eel; і ons, вам не подходит, есть смысл заглянуть в пространство имен System. Collect і oris. Sped zed. В 3tcm пространстве имен определен свой набор типов для работы с наборами эле-
Пространство имен System. Collections 221
ментов. Как видно из названия пространства имен, эти типы предназначены для специальных случаев. В качестве примера можно назвать типы StringDictionary и ListDictionary, которые специальным образом реализуют интерфейс IDictionary. Мы настоятельно рекомендуем, прежде чем заняться собственной реализацией классов для работы с коллекциями элементов, заглянуть в электронную документацию Visual Stu<lio,N ET и познакомиться с уже готовыми классами. Вполне возможно, что значительная часть работы была уже сделана до нас.
Применение ArrayList
При ближайшем рассмотрении классов, определенных в пространстве имен System. CoI lections, выясняется, что они обладают очень схожей функциональностью
и реализуют одни и те же интерфейсы. Поэтому вместо того, чтобы углубляться
в подробности реализации каждого из классов, мы подробно разберем применение лишь одного из них — System. Col lections .ArrayList. Надеемся, что после этого разобраться в использовании остальных классов не составит для вас особого труда.
B этой главе мы определили класс Cars, который представляет собой набор объектов типа Саг. В нашем случае Cars был реализован на основе простого массива — то есть в качестве базового был использован класс System.Array. Поскольку у обычного массива возможностей не так много, нам пришлось создавать значительное количество дополнительного кодадля того, чтобы можно было обращаться к элементам Cars из внешнего мира. Кроме того, при работе с Cars в его нынешнем состоянии мы столкнемся с серьезным ограничением — у этого массива фиксированный размер.
Гораздо удобнее и эффективнее было бы не делать лишнюю работу, а воспользоваться уже готовым купотреблению классом System. Collections. ArrayList, в котором многие нужные нам возможности реализованы изначально. Этот класс предоставляет в наше распоряжение готовые методы для вставки, удаления и нумерации внутренних элементов.
Для того чтобы воспользоваться возможностями ArrayLi st, мы применим не классическое наследование, а модель включения-делегирования, когда класс ArrayList будет вложен внутрь нашего класса Cars (почему именно так, выяснится чуть позже). Фактически единственное, что мы должны сделать, — реализовать в Cars набор открытых методов, которые будут передавать вызовы на выполнение различ-ныхдействий (делегировать) внутреннему классу carLi st, производному от ArrayLi st.
Выглядеть это может так:
// Нан больше не нужно реализовывать !Enumerator - все уже сделано за нас в ArrayList
public class Cars : IEnumerable
\
II Это - тот самый внутренний класс, который и будет делать всю работу private ArrayList carust-,
Il Создаем объект класса carList при помощи конструктора Cars public CarsO {carList = new ArrayListO;}
// Реализуем нужные для приема вызовов извне и передачи их carList
// Meiifl для вставки объекта Саг
222 Глава 4 • Интерфейсы и коллекции
public void AddCar(Car с) { carList.AddCc); }
Il Метод для удаления объекта Саг public void RemoveCarCint carToRemove) { carList.RemoveAUcarToRemove): }
II Свойство, возвращающее количество объектов Car
public int CarCount
{ get j return carList,Count: } }
II Метод для очистки объекта - удаления всех объектов Саг public void ClearAllCarsO { car-List.ClearO: }
II Кетод. который отвечает на вопрос - есть ли уже в наборе такой объект Саг public bool CarlsPresentfCar с) { return carLіst,Contains(с), }
// А все. что связано с реализацией !Enumerator, мы просто перенаправляем в carList
public Enumerator GetEnumerator() { return carList.GetEnumeratorO: }
}
Помимо того что такое определение класса Cars само по себе проще, его еще и удобнее использовать:
//Применение нового варианта класса Cars
public static void MainC)
{
Cars carLot = new CarsO:
// Чтобы было с чен работать, добавляє* несколько объектов Саг cartot.AddCarC new Car("Jasper". 200. 80)); са rLot. AcJdCa г ( new Ca г (¦ Mandy". 140. 80)); cartot.AddCarC new CarCPorker". 90, 90)): carLot.AddCar( new CarVJmbo". 40, A)):
Il Выводим информацию о каждом классе при помощи конструкции foreach Console.WriteLineCYou have {0} in the lot: \n". carLot.CarCount): foreach (Саг с in carLot) {
Console.WriteLine("Name: {0)'. c.PetName): Console.WriteLine: "Max speed; c.MaxSpeed);
}
і
II Удаляем одну из машин carLot.RemoveCar(З):
Console WnteuneCVou have in the Tot.\n\ carLot.CarCountJ:
//Добавляем еще одну машину и проверяем ее наличие в наборе Саг temp = new CarC'Zippy", 90. 90); саrLot.AddCaг(temp);
if(carLot XarlsPresent(temp))
Console.teilпэ(temp.Pet-lame + is already in the
Предыдущая << 1 .. 88 89 90 91 92 93 < 94 > 95 96 97 98 99 100 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100