КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Интерфейсы коллекций
Mclntosh 13 Cortland 12 Winsap 11 RedDel 10 GoldenDel 1 Jonathan 0 Цвет сорта Mclntosh - красно-зеленый Цвет сорта Cortland - красный Цвет сорта Winsap - красный Цвет сорта RedDel - красный Цвет сорта GoldenDel - желтый Цвет сорта Jonathan - красный Mclntosh имеет значение 5 Cortland имеет значение 4 Winsap имеет значение 3 RedDel имеет значение 2 GoldenDel имеет значение 1 Jonathan имеет значение О
Обратите внимание на то, как for - циклы управляются переменной типа apple. Поскольку перечисление — это целочисленный тип, значение перечисления может быть использовано везде, где допустимы целые значения. Поскольку значения перечислимого типа начинаются с нуля, их можно использовать для индексирования массива color (чтобы получить цвет яблок). Заметьте: в этом случае необходимо выполнить приведение типа. Как упоминалось выше, неявные преобразования между целочисленными и перечислимыми типами не определены. Поэтому без явно заданного приведения типа здесь не обойтись. Поскольку перечислимые типы представляют собой целочисленные значения, их можно использовать для управления switch - инструкцией.
6.9.1 Инициализация перечислений Одно или несколько символов в перечислении можно определить с помощью инициализатора. Это реализуется путем использования знака " равно " и последующего целого значения. Символам, стоящим после инициализатора, присваиваются значения, превышающие предыдущее значение инициализации. Например, следующий фрагмент кода присваивает число 10 символу RedDel. enum apple {Jonathan, GoldenDel, RedDel = 10, Winsap, Cortland, Mclntosh }; Вот какие значения имеют теперь эти символы:
6.9.2 Задание базового типа перечисления По умолчанию перечисления используют тип int, но можно также создать перечисление любого другого целочисленного типа, за исключением типа char. Чтобы задать тип, отличный от int, укажите этот базовый тип после имени перечисления и двоеточия. Например, следующая инструкция создает перечисление apple с базовым типом byte.
enum apple: byte {Jonathan, GoldenDel, RedDel, Winsap, Cortland, Mclntosh}; Теперь член apple.Winsap, например, представляет собой byte - значение.
Структуры данных, коллекции и классы-прототипы В C# под коллекцией понимается группа объектов. Пространство имен System.Collections содержит множество интерфейсов и классов, которые определяют и реализуют коллекции различных типов (динамические массивы, стеки, очереди, словари, хеш-таблицы и т.п.). Интерфейсы, которые поддерживают коллекции и их иерархия приведены на рисунке 3.1.
Рис. 3.1. Иерархия интерфейсов System.Collections
Интерфейс ICollection можно назвать фундаментом, на котором построены все коллекции. В нем объявлены основные методы и свойства, без которых не может обойтись ни одна коллекция. Самое востребованное свойство этого интерфейса – Count, содержит количество элементов, хранимых в коллекции в данный момент. Если свойство Count равно нулю, значит, коллекция пуста. В интерфейсе ICollection определен следующий метод: void CopyTo(Array target, int startIdx) Этот метод копирует содержимое коллекции в массив, заданный параметром target, начиная с индекса, заданного параметром startIdx. Можно сказать, что метод CopyTo() обеспечивает переход от коллекции к стандартному C#-массиву.
Интерфейс IList наследует интерфейс ICollection и определяет поведение коллекции, доступ к элементам которой разрешен посредством индекса с отсчетом от нуля. Помимо методов, определенных в интерфейсе ICollection, интерфейс IList определяет и собственные методы:
В интерфейсе IList определены следующие свойства: boolIsFixedSize { get; } – равно true, если коллекция имеет фиксированный размер, т.е. в нее нельзя вставлять элементы и удалять их из нее. boolIsReadOnly { get; } – равно true, если коллекция предназначена только для чтения, т.е. содержимое коллекции не подлежит изменению. В интерфейсе IList определен следующий индексатор: object this[int idx] { get; set; } Этот индексатор можно использовать для считывания или записи значения нужного элемента (но не для добавления).
Интерфейс IDictionary определяет поведение коллекции, которая служит для хранения пар ключ/значение. Сохраненную однажды пару можно извлечь по заданному ключу. Интерфейс IDictionary наследует интерфейс ICollection. Методы, объявленные в интерфейсе IDictionary, сведены в таблице:
В интерфейсе IDictionary определены следующие свойства:
В интерфейсе IDictionary определен следующий индексатор: object this[object key] { get; set; } Этот индексатор можно использовать для получения или установки значения элемента, а также для добавления в коллекцию нового элемента. Следует обратить внимание на то, что «индекс» в данном случае является не обычным индексом, а ключом элемента.
Интерфейс IEnumerable должен быть реализован в любом классе, если в нем предполагается поддержка нумераторов. В этом интерфейсе определен единственный метод: IEnumeratorGetEnumerator() Он возвращает нумератор для коллекции. Кроме того, реализация интерфейса IEnumerable позволяет получить доступ к содержимому коллекции с помощью цикла foreach.
Интерфейс IEnumerator, собственно, и определяет действие любого нумератора. Используя его методы, можно циклически опросить элементы коллекции. Для коллекций, в которых хранятся пары ключ/значение (т.е. словари), метод GetEnumerator() возвращает объект типа IDictionaryEnumerator, а не IEnumerator. Интерфейс IDictionaryEnumerator является производным от интерфейса IEnumerator и распространяет свои функциональные возможности нумератора на область словарей. В интерфейсе IEnumerator определено единственное свойство: objectCurrent { get; } Это свойство позволяет получить (но не установить) элемент, соответствующий текущему значению нумератора. В интерфейсе IEnumerator определены два метода:
Интерфейс IDictionaryEnumerator дополнительно определяет «свои» свойства:
В интерфейсе IComparer определен метод, который позволяет сравнивать два объекта: int Compare (object v1, object v2) Этот метод возвращает положительное число, если значение v1 больше значения v2, отрицательное, если v1 меньше v2, и ноль, если сравниваемые значения равны. Этот интерфейс можно использовать для задания способа сортировки элементов коллекции.
Интерфейс IHashCodeProvider должен быть реализован коллекцией, если необходимо определить собственную версию метода GetHashCode(). Все объекты (для получения хеш-кода) наследуют метод Object.GetHashCode(), который используется по умолчанию. посредством реализации интерфейса IHashCodeProvider можно определить альтернативный метод.
Дата добавления: 2014-01-06; Просмотров: 588; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |