Программирование >>  Программирование с использованием ajax 

1 ... 87 88 89 [ 90 ] 91 92 93 ... 396



Коллекции,сравнения и преобразования

Все основные приемы ООП, которыми можно пользоваться в С#, уже были рассмотрены, но существует еще несколько более сложных приемов, с которыми тоже стоит ознакомиться. Поэтому в настоящей главе рассматриваются следующие темы.

□ Коллекции. Коллекции позволяют обслуживать группы объектов. В отличие от массивов, применение которых демонстрировалось в предыдущих главах, коллекции могут предоставлять более совершенную функциональность, вроде возможности управлять доступом к содержащимся в них объектам, возможности выполнять по ним поиск, сортировать их и т.д. Здесь вы узнаете, как использовать и создавать классы коллекций, а также ознакомитесь с некоторыми мощными приемами для извлечения из таких классов максимальной пользы.

□ Сравнения. При работе с объектами часто требуется выполнять сравнение между ними. Это особенно важно в коллекциях, поскольку именно таким образом в них обеспечивается возможность выполнять сортировку. Здесь вы увидите, как сравнивать объекты разными способами, в том числе и путем перегрузки операций, а также как использовать интерфейсы IComparable и IComparer для сортировки коллекций.

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

Коллекции

В главе 5 рассказывалось о том, как для создания типов переменных, содержащих ряд объектов или значений, использовать массивы. С массивами, однако, связаны свои ограничения. Наибольшее из них состоит в том, что после создания массивы



имеют фиксированный размер, так что добавлять новые элементы в конец существующего массива без создания нового нельзя. Это часто означает, что синтаксис, применяемый для манипулирования массивами, может становиться чрезмерно сложным. Приемы ООП позволяют создавать классы, способные выполняют большую часть из этих манипуляций внутренним образом, тем самым упрощая код, в котором используются списки элементов или массивы.

Массивы в С# реализуются в виде экземпляров класса System. Array и являются всего лишь одним из типов, которые называются классами коллекций. Классы коллекции в целом применяются для обслуживания списков объектов и могут предоставлять больше функциональных возможностей, чем простые массивы. Большая часть из этих функциональных возможностей обеспечивается реализацией интерфейсов из пространства имен System.Collections, что стандартизирует синтаксис коллекций. В этом пространстве имен также содержатся и другие интересные вещи, вроде классов, которые реализуют эти интерфейсы другими, отличными от System.Array способами.

Поскольку функциональные возможности коллекций (включая базовые функции, вроде получения доступа к элементам коллекции путем применения синтаксиса [индекс]) доступны через интерфейсы, допускается не только использовать базовые классы коллекций вроде System.Array, но и создавать свои собственные специализированные классы коллекций и настраивать их под потребности объектов, которые должны поставляться в виде коллекции. Одним из преимуществ такого подхода, как будет показано позже, является то, что специальные классы коллекций могут быть строго типизированными. То есть при извлечении элементов из такой коллекции, их не нужно приводить к правильному типу. Другое преимущество связано с возможностью предоставлять специализированные методы, например, какой-то быстрый способ для получения подмножеств элементов. Скажем, в примере с колодой карт это мог быть метод для быстрого получения всех элементов Card определенной масти.

Базовые функциональные возможности для коллекций в пространстве имен System.Collections предоставляют несколько интерфейсов.

□ IEnumerable - предоставляет возможность прогонять элементы в коллекции по циклу.

□ ICollection - предоставляет возможность получать информацию о количестве элементов в коллекции и копировать элементы в простой тип-массив (унаследован от IEnumerable) .

□ IList - предоставляет для коллекции список элементов вместе с возможностями для получения доступа к этим элементам и другими базовыми возможностями, имеющими отношение к спискам элементов (унаследован от lEnumerable и ICollection).

□ IDictionary- похож на IList, но предоставляет список элементов, доступных по значению ключа, а не по индексу (унаследован от lEnumerable и ICollection).

Класс System.Array реализует интерфейсы IList, ICollection и lEnumerable. Однако он не поддерживает некоторые из более совершенных функциональных возможностей IList и предоставляет список элементов с использованием фиксированного размера.

Использование коллекций

Один из классов в пространстве имен Systems.Collections, а именно - System. Collections . ArrayList, тоже реализует интерфейсы IList, ICollection и lEnumerable, но делает это более совершенным образом, чем класс System.Array.



Практическое занятие!

Массивы или более совершенные коллекции

1. Создайте новый проект типа консольного приложения по имени ChllExOl и сохраните его в каталоге С: \BegVCSharp\Chapterll.

2. Добавьте в него три новых класса Animal (Животное), Cow (Корова) и Chicken (Курица), щелкнув правой кнопкой мыши в окне Solution Explorer и выбрав в контекстном меню пункт Acld=Class (Добавить=>Класс) для каждого добавляемого класса.

3. Измените код в файле Animal. cs следующим образом:

namespace ChllExOl {

public abstract class Animal {

protected string name; public string Name {

get {

return name;

name = value;

public Animal ()

name = The animal with no name ; Животное без клички

public Animal(string newName)

name = newName;

public void FeedO

Console.WriteLine( {0} has been fed. , name);

Вывод информации о кормлении

4. Измените код в файле Cow. cs следующим образом:

namespace ChllExOl

public class Cow : Animal

Если массивы являются фиксированными по размеру (т.е. ни добавлять в них, ни удалять из них элементы нельзя), то этот класс может применяться для представления списков элементов разной длины. Чтобы разобраться, какие возможности открывает такая высокоэффективная коллекция, в следующем практическом занятии демонстрируется пример применения такого класса и простого массива.



1 ... 87 88 89 [ 90 ] 91 92 93 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика