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


* При перепечатке материалов ссылка на 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

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

Организация доступа к данным и работа с объектом DataReader
Blend PDF with Silverlight
Towards Cleaner Code, A C# Asynchronous Helper
Модификация и обновление данных
Вложенные типы
Установка и извлечение динамических свойств вручную
Конструкторы и деструкторы
Работа с мастером Data Form
Работа с элементами управления
Общеязыковая исполняющая среда
Применение класса XmlDataDocument
Parsing Expression Grammar Support for C# 3.0 Part 1 – PEG Lib and Parser Generator
Реализация членов интерфейса на Visual C#
Установка сборок в GAC
Лямбда-выражения
| .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


     



Rambler's Top100

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

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