Имя Пароль
Зарегистрироваться


* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Наборы
7 февраля 2009

Наборы предоставляют дополнительные возможности по управлению группами
объектов. Набор (collection) — это специальный класс, объединяющий несколько
объектов в группу и открывающий к ней доступ. Как и в массиве, доступ к члену
набора осуществляется через его индекс, но в отличие от массива размеры набора
разрешается динамически изменять, добавляя и удаляя его члены во время выпол-
нения.
Примечание В этом разделе рассматриваются только типы наборов из пространства
имен System. Collections. Технически возможно создать класс набора и без этих ти-
пов, применяя некоторые интерфейсы, которые обычно реализуют в типах набо-
ров. Подробнее об интерфейсах и их реализации рассказано в главе 4.
Как правило, наборы применяют для управления группами элементов, динами-
чески формируемых во время выполнения. Например, можно создать приложение
для анализа группы объектов Customer, представляющих сведения о покупателях.
Создание набора объектов Customer позволит анализировать отдельные объекты,
перебирать их в цикле, а также добавлять новые и удалять устаревшие объекты по
мере необходимости.
Класс ArrayList
Класс System. Collections.ArrayList предоставляет базовую функциональность цля ра-
боты с наборами, достаточную для решения многих задач. Этот класс позволяет
динамически добавлять и удалять элементы из простого списка. Для извлечения
элемента необходимо указать его индекс в списке. Новые экземпляры класса Array-
List создают так:
Visual Basic .NET
Dim myList As New System.Collections.ArrayList()
Visual C#
System.Collections.ArrayList myList = new System.Collections.ArrayList();
Метод Add
К созданному экземпляру класса ArrayList можно добавлять новые элементы при
помоши метода Add:
Visual Basic .NET
Dim myWidget As New Widget()
myList.Add(myWidget)
Visual C#
Widget myWidget = new WidgetO;
myList.Add(myWidget);
Нумерация объектов-элементов набора ArrayList начинается с нуля, то есть пер-
вый элемент списка получает индекс «О», второй — «1» и т.д.
Свойство-индексатор Item
Свойство Item набора позволяет извлечь из него элемент с заданным индексом. В
Visual Basic .NET свойство Item считается свойством набора по умолчанию. Таким
образом, при обращении к элементам набора можно опускать имя свойства Item,
как при обращении к элементу массива. В Visual C# свойства наборов по умолча-
нию называются индексаторами (indexer), поэтому вместо явного указания имени
свойства Item в программах на С# необходимо применять ссылки на элементы мас-
сива. Подробнее свойства по умолчанию и индексаторы обсуждаются на следую-
щем занятии. Следующий пример демонстрирует оба способа получения элемента
набора посредством свойства Item.
Visual Basic .NET
Dim myObject As Object
myObject = rnyList(O)
Следующая строка эквивалентна предыдущей.
myObject = myList.Item(O)
Visual C#
object myObject;
myObject = myListfO];
Все ссылочные типы, хранимые в наборах, имеют тип Object. Поэтому свойство
Item всегда возвращает ссылку на Object, независимо от реального типа объекта,
который находится в этом элементе. Если же нужно получить исходный тип, кото-
рый был записан в набор, необходимо явно привести объект, возвращаемый свой-
ством Item, к требуемому типу:
Visual Basic .NET
Dim myWidget As Widget
' Этот пример предполагает наличие набора объектов Widget.
myWidget = CType(widgetCollection(0), Widget)
Visual C#
Widget myWidget;
myWidget = (Widget)widgetCollection[0];
Методы Remove и RemoveAt
Эти методы предназначены для удаления элементов из набора. Метод Remove при-
нимает в качестве параметра ссылку на объект, удаляемый из набора:
Visual Basic .NET
Dim myWidget As New Widget()
Dim myList As New System.Collections.ArrayListf)
' Добавить в набора объект Widget.
myList.Add(myWidget)
' Удалить объект Widget из набора.
myList.Remove(myWidget)
Visual C#
Widget myWidget = new Widget();
System.Collections.ArrayList myList = new
System. Collections. ArrayListO;
// Добавить объект Widget в набор.
myList.Add(myWidget);
// Удалить объект Widget из набора.
myList.Remove(myWidget);
Попытка удалить из набора объект, отсутствующий в нем, не вызывает ошибку
и просто игнорируется.
Метод RemoveAt позволяет удалить из набора элемент с заданным индексом, на-
пример, так:
Visual Basic .NET
Dim myList As New System.Collections,ArrayListO
' Добавить в набор три объекта Widget.
Dim X As Integer
For X = 1 to 3
Dim aWidget As New Widget()
myList.Add(aWidget)
Next
1 Удалить объект Widget с индексом 1.
myList.RernoveAt(l)
Visual C#
System.Collections.ArrayList myList = new
System.Collections.ArrayList();
// Добавить в набор три объекта Widget,
for (int x - 0; x < 3; x++)
:
Widget myWidget - new Widgetf);
myList.Add(myWidciet);
: // Удалить объект Widget с
индексом 1.
myList.RemoveAt(1);
Заметьте: после удаления оставшиеся элементы набора нумеруются заново, что
позволяет восстановить их последовательную нумерацию. В силу этих обстоятельств
индекс элементов может изменяться.
Свойство Count
Свойство Count возвращает текущее число элементов набора. Поскольку нумера-
ция элементов начинается с нуля, значение Count всегда на единицу больше верх-
ней границы массива.
Другие типы наборов из класса Collections
В пространстве имен System. Collections есть и другие классы наборов, позволяющие
упорядочивать объекты, объединяя их в группы. Эти классы предоставляют допол-
нительные возможности и позволяют решать специфические задачи, недоступные
классу ArrayList. Отдельные классы кратко описаны в таблице 3-6.
Таблица 3-6. Члены класса System. Collections
Имя Описание
BitArray Представляет уплотненный массив однобитных элементов
(принимающих значение 1 или 0)
CollectionBase Основа для создания пользовательских классов наборов, предоставляет
большинство функций, необходимых для обслуживания наборов
Hashtable Набор пар «ключ — значение», упорядоченных по значению хеш-кода
ключа
Queue Набор объектов, организованный по принципу «первым вошел —
первым вышел»
Sortedlist Группа объектов, доступных через значение индекса или ключа
Stack Набор объектов, организованный по принципу «первым вошел —
последним вышел»

Теги: .NET

Статьи по теме:

Принципы создания элементов управления
Языки программирования .NET
Мемоизация (memoization)
Работа с несколькими результирующими наборами
Свойства, доступные только для чтения или только для записи
Пошаговое исполнение кода
Модификаторы доступа к членам
Применение отладочных инструментов
Доступ к «плоским» файлам
Рисование простых фигур
Сокрытие членов базового класса в Visual C#
Решения .NET
Реализация полиморфизма через интерфейсы
Установка сборок в виде компилированных образов
Применение класса XmlDataDocument
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Наборы. Регион сайта: Москва и Санкт-Петербург