Коллекции в С# презентация

Содержание

Слайд 2

В С# под коллекцией понимается набор элементов с заданным правилом их перебора
Классы, объекты

которых способны хранить и обрабатывать такие наборы называются классами коллекций
Простейшим примером коллекции является массив. Массивы – это объекты классов, производных от базового абстрактного класса System.Array
Другими примерами коллекций являются списки, деревья, стеки, очереди, словари

Понятие коллекции

Слайд 3

Все коллекции разработаны на основе набора четко определенных интерфейсов
Пространство имен System.Collections содержит множество

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

Интерфейсы коллекций

Слайд 4

Основополагающим для всех коллекций является реализация перечислителя (итератора), который поддерживается интерфейсами IEnumerator и

IEnumerable
Перечислитель должен обеспечивать стандартизованный способ поэлементного доступа к содержимому коллекции

Перечислители

Слайд 5

Интерфейсы пространства имен System.Collections

Слайд 6

Классы пространства имен System.Collections

Слайд 7

Классы пространства имен System.Collections

Слайд 8

Для того, чтобы к объектам некоторого класса можно было бы применять цикл foreach,

необходимо реализовать в этом классе интерфейс IEnumerable
Этот интерфейс содержит единственный метод
IEnumerator GetEnumerator( )
Метод GetEnumerator( ) возвращает ссылку на интерфейс IEnumerator, который, в свою очередь должен быть реализован в данном классе

Интерфейс IEnumerable

Слайд 9

Данный интерфейс предоставляет следующие члены:
свойство Current типа object, позволяющее получить текущий элемент в

коллекции;
bool MoveNext( ) – переход к следующему элементу коллекции с возвратом значения true, если такой переход возможен и false в противном случае;
void Reset( ) – возврат в начальное состояние

Интерфейс IEnumerator

Слайд 10

Сразу после выполнения метода Reset() итератор установлен перед первым элементом коллекции и попытка

вызова свойства Current приводит к выдаче исключения
Поэтому необходимо предварительно вызвать метод MoveNext, чтобы переместить итератор к первому элементу коллекции
Если метод MoveNext проходит конец коллекции, то он возвращает значение false, а итератор помещается после последнего элемента коллекции и обращение к свойству Current снова приводит к выдаче исключения

Интерфейс IEnumerator

Слайд 11

В качестве примера рассмотрим класс, который содержит в качестве одного из полей массив

строк и реализует интерфейс IEnumerable:
public class ListBoxTest : IEnumerable
{ . . . }
Структура класса Структура класса ListBoxTest
Реализация метода GetEnumerator() имеет вид:
public IEnumerator GetEnumerator( )
{
return (IEnumerator) new ListBoxEnumerator(this);
}

Пример реализации итератора

Слайд 12

В методе GetEnumerator( ) создается итератор – объект класса ListBoxEnumerator, который приводится к

типу интерфейса IEnumerator, т.е. к типу возвращаемого значения
Аргумент this означает, что нумератор создается для конкретного объекта класса-контейнера ListBoxTest
Класс ListBoxEnumerator в нашем случае реализует интерфейс IEnumerator и имеет следующую структуру

Итератор

Слайд 13

Класс-итератор объявляется закрытым, поэтому использовать его можно только внутри класса-контейнера
Конструктор класса-итератора имеет вид:
public

ListBoxEnumerator(ListBoxTest lbt)
{ this.lbt = lbt;
index = -1;
}
Объект-итератор получает ссылку на содержащий его объект класса-контейнера

Конструктор класса-итератора

Слайд 14

Метод MoveNext( ) реализован следующим образом:
public bool MoveNext( )
{
index++;
if (index

>= lbt.strings.Length)
return false;
else
return true;
}

Метод MoveNext( )

Слайд 15

Реализация метода Reset( ):
public void Reset( )
{
index = -1;
}
Свойство Current:
public

object Current
{
get
{ return lbt[index]; }
}
Теперь можно использовать цикл foreach

Метод Reset( )

Слайд 16

Еще одним важным интерфейсом, предоставляемым платформой .NET Framework для работы с массивами и

классами коллекций, является интерфейс ICollection
Он обладает тремя свойствами:
Count,
IsSynchronized,
SyncRoot,
а также одним методом СоруТо( )
Чаще других используется свойство Count, которое возвращает количество элементов в коллекции

Интерфейс ICollection

Слайд 17

Эти интерфейсы являются стандартным способом для сравнения объектов в .NET Framework
Разница между ними

заключается в следующем:
интерфейс IComparable реализуется в классе подлежащего сравнению объекта и потому позволяет выполнять сравнения только между этим и еще каким-то объектом;
интерфейс IComparer реализуется в отдельном классе и потому позволяет выполнять сравнения между любыми двумя объектами

Интерфейсы IComparable и IComparer

Слайд 18

Интерфейс IComparable поддерживает один единственный метод CompareTo (), которому в качестве аргумента должен

передаваться объект
Этот метод возвращает результат целого типа, позволяя в некоторых случаях оценить степень различия между объектами

Метод CompareTo

Слайд 19

Интерфейс IComparer тоже предоставляет единственный метод Compare (), который принимает два объекта и

возвращает целочисленный результат, точно так же, как метод CompareTo()
В обоих случаях параметры, предоставляемые методам, относятся к типу System.Object, поэтому сравниваться могут объекты любого типа
Это требует выполнения какой-то операции по сравнению типов и, возможно, выдачи исключений в случае обнаружения того, что используемые типы являются неправильными

Метод Compare

Слайд 20

В состав .NET Framework входит используемая по умолчанию реализация интерфейса IComparer, предназначенная для

класса по имени Comparer, который находится в пространстве имен System.Collections
Этот класс способен выполнять специфические для каждой культуры операции сравнения между простыми типами, а также любым типом, который поддерживает интерфейс IComparable

Класс Comparer

Слайд 21

Классической проблемой, связанной с типом Array, является его фиксированный размер
Класс ArrayList является массивом,

чей размер динамически увеличивается по мере необходимости
Объекты ArrayList обладают рядом полезных свойств и методов, позволяющих эффективно работать с ними
Класс ArrayList реализует интерфейс IList

Класс ArrayList

Слайд 22

Этот интерфейс объявлен в пространстве имен System.Collections:
public interface IList : ICollection, IEnumerable
Интерфейс IList

представляет коллекцию объектов с индивидуальным доступом, осуществляемым при помощи индекса

Интерфейс IList

Слайд 23

Методы интерфейса IList

Слайд 24

Свойства интерфейса IList

Слайд 25

Члены класса ArrayList

Слайд 26

Члены класса ArrayList

Слайд 27

Члены класса ArrayList

Имя файла: Коллекции-в-С#.pptx
Количество просмотров: 131
Количество скачиваний: 0