Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 22702|Отговор: 0

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

[Копирай линк]
Публикувано в 11.11.2014 г. 8:44:59 ч. | | |
Колекция, която представлява набор от обекти, до които може да се достъпи чрез преминаване през всеки елемент (по-специално, може да се достъпи чрез foreach цикъл)
Колекцията съдържа множество елементи, т.е. има обект клас колекция и N елементни обекта

Тъй като всеки колекция клас реализира интерфейса IEnumerable, всеки обект на колекция има метод GetEnumerator(), който може да върне обект, реализиращ интерфейса IEnumerator, който не е нито колекция, нито обект на клас елемент на колекция, той е независим класов обект. Този обект ви позволява да преминавате през всеки елементен обект в колекция клас обект

Ако класът за колекция е клас за колекция, дефиниран от потребителя, потребителят трябва да реализира своя метод GetEnumerator(), в противен случай цикли не могат да се използват. Разбира се, класът IEnumerator, съответстващ на този персонализиран колекция клас (класът, който реализира интерфейса), също трябва да бъде персонализиран

Например, IEnumerator, съответстващ на класа на колекцията ArrayList, е ArrayListEnumeratorSimple
            IEnumerator, съответстващ на класа на колекцията от масиви, е SZArrayEnumerator
      (Нито един от тези класове не е покрит в документацията на .NET Framework Class Library (MSDN))

1. Интерфейсите в System.Colloctions, които представят поведението на колекцията, са:
1) ICollection
Дефинирайте размера, броя на enum-овете и методите за синхронизация за всички колекции. Произлизано от IEnumerable
Той дефинира най-основното поведение на колекция класа, а всички колекция класове реализират този интерфейс (базов интерфейс)
Но поведението му е твърде базово: това е основно свойство на Count, и няма много смисъл да се прилага самостоятелно

2)IEnumerable
Изложете изброяване, което поддържа прости итерации върху множество
Той има само един метод, GetEnumerator(), който връща интерфейс на IEnumerator, чрез който може да преминава през колекцията
По същество всички колекционни класове реализират този интерфейс

3) IList
Имплементацията на IList представлява колекция от стойности, които могат да бъдат сортируеми и достъпни чрез индекс за своите членове, а самата тя реализира интерфейсите ICollection и IEnumerable
е абстрактният базов клас за всички списъци. Има три категории IList имплементации: само за четене, с фиксиран размер и с променлив размер.

4) Идентификатор
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) Hashtable
Имплементиране на интерфейси: 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