Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 22702|Ответ: 0

[Источник] Существует несколько типов роллапов для коллекций в C#

[Скопировать ссылку]
Опубликовано 11.11.2014 8:44:59 | | |
Коллекция, представляющая набор объектов, к которым можно получить доступ, пройдя по каждому элементу (в частности, к нему можно получить доступ с помощью foreach цикла)
Коллекция содержит несколько элементов, то есть существует объект класса коллекции и N элементных объектов

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

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

Например, IEnumerator, соответствующий классу коллекции ArrayList, называется ArrayListEnumeratorSimple
            IEnumerator, соответствующий классу коллекции Array, — это SZArrayEnumerator
      (Ни один из этих классов не рассматривается в документации библиотеки классов .NET Framework (MSDN))

1. Интерфейсы в System.Colloctions, отражающие поведение коллекции, включают:
1) ICollection
Определите размер, количество enums и методы синхронизации для всех коллекций. Производно из IEnumerable
Он определяет самое базовое поведение класса коллекции, и все классы коллекции реализуют этот интерфейс (базовый интерфейс)
Но его поведение слишком простое: это в основном собственность Count, и реализовывать его в одиночку не имеет смысла

2)IEnumerable
Выведите перечисление, поддерживающее простые итерации на множестве
У него есть только один метод — GetEnumerator(), который возвращает интерфейс IEnumerator, через который можно обходить коллекцию
Практически все классы коллекций реализуют этот интерфейс

3) IList
Реализация IList представляет собой набор значений, которые можно сортировать и доступны по индексу для своих членов, а сама реализует интерфейсы ICollection и IEnumerable
является абстрактным базовым классом для всех списков. Существует три категории реализации IList: только для чтения, фиксированный размер и переменный размер.

4) IDictionary
Реализация IDictionary представляет собой набор пар ключ/значение, который сам реализует интерфейсы ICollection и IEnumerable
является базовым интерфейсом набора пар ключ/значение. Существует три категории реализаций IDictionary: только для чтения, с фиксированным размером и с переменным размером.
IDictionary можно назвать словарем, картой или shash списком, и он получает доступ к значениям на основе ключей (любого типа).

2. Классы коллекций, которые можно использовать непосредственно в System.Collections, включают:
1)ArrayList
Реализовать интерфейсы: IList, ICollection, IEnumerable
Пока коллекция не изменяется, ArrayList может безопасно поддерживать несколько считывателей одновременно
По мере добавления элементов в ArrayList ёмкость автоматически увеличивается по требованию путём перераспределения (в 2 раза)
Если нужно создать массив объектов, но вы заранее не знаете его размер, можно использовать ArrayList
ArrayList называет все элементы объектами, поэтому его необходимо вводить при обращении к элементам в ArrayList
Плюсы: динамическое изменение размера, гибкая и удобная вставка и удаление элементов, сортировка
Недостатки: Производительность вставки хуже, чем у массивов, не сильных типов

2)BitArray
Реализовать интерфейсы: ICollection и IEnumerable
Управляйте сжатыми массивами битовых значений.

3) Хэшированная таблица
Реализовать интерфейсы: IDictionary, ICollection, IEnumerable
Вы можете свободно добавлять и удалять элементы в Hashtable, например, ArrayList, но без накладных расходов производительности

4) SortedList
Реализовать интерфейсы: IDictionary, ICollection, IEnumerable
SortedLIst сочетает преимущества ArrayList и Hashtable и может быть отсортирован по значению ключа

5) Очередь
Реализовать интерфейсы: ICollection и IEnumerable
Queques — это очереди, первый пришёл — первым ушёл доступ к отдельным элементам
Вы можете вызвать метод GetEnumerator() объекта Queque, чтобы объект IEnumerator прошёл по элементам в очереди

6) Стек
Реализовать интерфейсы: ICollection и IEnumerable
Стек — это стек, который обращается к отдельным элементам по принципу «последний пришёл — первый»
Вы можете вызвать метод GetEnumerator() объекта Stack, чтобы объект IEnumerator прошёл через элементы стека

3. Упомянутые выше классы коллекции — это все классы общего собрания, и большинство элементов, которые они принимают, относятся к типу объекта, когда объект вставляется в
После коллекции исходная информация о типах теряется — то есть эти классы общего собрания не сильно типизированы
Обходным путём является использование сильно типизированных классов коллекций
Пространство имён System.Collections
Пространство имён System.Collections.Specialized Некоторые классы могут соответствовать требованиям и использоваться напрямую или унаследовать





Предыдущий:Открытое письмо большинству придурков накануне Дня одиночек
Следующий:C# Generic Range Rover (поворот)
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com