Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


System.Collections.Generic



Большинство типов универсальных коллекций являются прямыми аналогами неуниверсальных типов.Dictionary<TKey, TValue> является универсальной версией Hashtable. Для перечисления он использует универсальную структуру KeyValuePair<TKey, TValue> вместо DictionaryEntry.

List<T> является универсальной версией ArrayList.Существуют и универсальные классы Queue<T> и Stack<T>, которые соответствуют неуниверсальным версиям.

Существуют универсальные и неуниверсальные версии SortedList<TKey, TValue>.Обе эти версии являются гибридами словаря и списка.Универсальный классSortedDictionary<TKey, TValue> представляет собой обычный словарь и не имеет неуниверсального эквивалента.

Универсальный класс LinkedList<T> является точным связанным списком.Он не имеет неуниверсального эквивалента.

ICollection      Определяет размер, перечислители и методы синхронизации для всех нестандартных коллекций.

           IComparer      Предоставляет метод для сравнения двух объектов.

           IDictionary      Представляет небазовую коллекцию пар "ключ-значение".

           IDictionaryEnumerator Перечисляет элементы неуниверсального словаря.

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

           IEnumerator   Поддерживает простой перебор по неуниверсальной коллекции.

           IEqualityComparer       Определяет методы для поддержки операций сравнения объектов в отношении равенства.

           IHashCodeProvider      Устаревшее. Предоставляет хеш-код объекта, используя пользовательскую хеш-функцию.

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

ArrayList         Реализует интерфейс IList с помощью массива с динамическим увеличением размера до нужного значения.

           BitArray           Управляет компактным битовым массивом значений, представленных логическими значениями, где значение true соответствует 1, а значение false соответствует 0.

           CaseInsensitiveComparer Проверяет равенство двух объектов без учета регистра строк.

           CaseInsensitiveHashCodeProvider           Устаревшее. Предоставляет хэш-код объекта, используя алгоритм хэширования, при котором не учитывается регистр строк.

           CollectionBase Предоставляет базовый класс abstract для строго типизированной коллекции.

           Comparer        Проверяет равенство двух объектов с учетом регистра строк.

           DictionaryBase Предоставляет базовый классabstract для строго типизированной коллекции ключ/значение.

           Hashtable        Предоставляет коллекцию пар "ключ-значение", которые упорядочены по хэш-коду ключа.

           Queue Предоставляет коллекцию объектов, которая обслуживается по принципу "первым поступил — первым обслужен".

           ReadOnlyCollectionBase Предоставляет базовый класс abstract для неуниверсальной коллекции со строгим типом, которая доступна только для чтения.

           SortedList        Предоставляет коллекцию пар "ключ-значение", упорядоченных по ключам. Доступ к парам можно получить по ключу и по индексу.

           Stack

 

 

Списки

Реализует интерфейс IList с помощью массива с динамическим увеличением размера до нужного значения.

 

ArrayList myAL = new ArrayList(); myAL.Add("Hello");

 

 

Хэш-таблицы Hashtable

Предоставляет коллекцию пар "ключ-значение", которые упорядочены по хэш-коду ключа.

Каждый элемент в паре "ключ-значение" хранится в объекте DictionaryEntry. Ключ не может быть равным null, а значение — может.

Объекты, используемые коллекцией Hashtable в качестве ключей, требуются для переопределения метода Object.GetHashCode (или интерфейсаIHashCodeProvider ) и метода Object.Equals (или интерфейса IComparer ). Реализация обоих методов и интерфейсов должна одинаковым образом учитывать регистр; в противном случае действие коллекции Hashtable может быть неправильным. Например, когда создается объект Hashtable, следует использовать класс CaseInsensitiveHashCodeProvider (или любую нечувствительную к регистру реализацию интерфейса IHashCodeProvider) с классомCaseInsensitiveComparer (или любой нечувствительной к регистру реализацией интерфейса IComparer).

Более того, при вызове этих методов с одними и теми же параметрами результат должен быть одинаковым, если ключ существует в коллекции Hashtable. В качестве альтернативы можно использовать конструктор класса Hashtable с параметром IEqualityComparer. Если равенство ключей определяется просто через равенство ссылок, будет достаточно наследуемой реализации методов Object.GetHashCode и Object.Equals.

Объекты, используемые в качестве ключей в коллекции Hashtable, должны быть доступны только для чтения.

При добавлении элемента в коллекцию Hashtable он помещается в определенный сегмент в зависимости от хэш-кода ключа. В дальнейшем поиск ключа осуществляется только в определенном сегменте с использованием хэш-кода ключа. Таким образом в значительной степени уменьшается количество операций сравнения ключей, которое требуется для нахождения элемента.

Показатель загрузки коллекции Hashtable определяет максимальное отношение количества элементов к количеству сегментов. Снижение показателя загрузки уменьшает среднее время поиска за счет увеличения объема используемой памяти. Значение показателя загрузки по умолчанию, равное 1,0, обычно обеспечивает наилучшее соотношение между объемом памяти и временем поиска. При создании коллекции Hashtable может быть задан другой показатель загрузки.

Когда элементы добавляются в коллекцию Hashtable, фактический показатель загрузки коллекции Hashtable увеличивается. Когда фактический показатель загрузки становится равным заданному, количество сегментов в объекте Hashtable автоматически увеличивается до наименьшего простого числа, которое больше удвоенного текущего количества сегментов в коллекции Hashtable.

Каждый ключевой объект в коллекции Hashtable должен иметь свою собственную хэш-функцию, доступ к которой может быть получен при вызове методаGetHash. Однако каждый объект, реализующий интерфейс IHashCodeProvider, может быть передан в конструктор класса Hashtable, а соответствующая хэш-функция используется для всех объектов в таблице.

Емкость коллекции Hashtable — это количество элементов, которое может вместить коллекция Hashtable. Когда в коллекцию Hashtable добавляются элементы, ее емкость автоматически увеличивается должным образом посредством перераспределения.

vb#c#

В операторе foreach языка C# (for each в Visual Basic) необходима информация о типе каждого элемента коллекции. Так как каждый элемент коллекцииHashtable представляет собой пару "ключ-значение", тип элемента не является типом ключа или типом значения. Вместо этого в качестве типа элемента используется DictionaryEntry. Например:

Hashtable openWith = new Hashtable();openWith.Add("txt", "notepad.exe");foreach( DictionaryEntry de in openWith )   {       Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);   }

 

 


 

32. Разработка Windows-приложений с использованием технологии Windows Forms. Основные идеи технологии. Примеры эффективного применения.

 

Forms предоставляет для проекта такие компоненты, как диалоговые окна, меню, кнопки и многие другие элементы управления, являющиеся частью стандартного пользовательского интерфейса (UI) Windows. По существу, эти элементы управления являются просто классами из библиотеки .NET Framework. Представление Конструктор в Visual C#, экспресс-выпуск позволяет перетаскивать элементы управления в основную форму приложения и изменять их размеры и расположение. После этого IDE автоматически добавит исходный код для создания и инициализации экземпляра соответствующего класса.

В этом примере представлено создание приложения веб-обозревателя, которое можно настроить с использованием ссылок на избранные веб-узлы.

В этом разделе рассматривается выполнение следующих задач.

  • Создание нового приложения Windows Forms.
  • Переключение между представлением Код и представлением Конструктор.
  • Изменение свойств формы Windows.
  • Добавление элемента управления MenuStrip.
  • Добавление элемента управления Button.
  • Создание и заполнение элемента управления ComboBox.
  • Использование элемента управления WebBrowser.
  • Создание обработчиков событий для элементов управления.

Форма Windows в представлении Конструктор — это визуальное представление окна, которое появится при открытии приложения. В представленииКонструктор можно перетаскивать различные элементы управления из панели элементов в форму. Эти элементы управления не являются реальными объектами, это просто изображения, которые удобно перемещать в форме для определенного расположения.

После расположения элемента управления в форме Visual C# в фоновом режиме создаст код для правильного размещения реального элемента управления при выполнении программы. Этот исходный код будет находиться в файле Form1.designer

Возможность изменять

Добавление обработчика событий для элемента управления Button для любых элементов и событий(в свойсвах обозначается как молния).

 Обработчик событий — это метод, который выполняется при взаимодействии пользователя с элементом управления. Visual C#, экспресс-выпуск автоматически создает пустые обработчики событий.

 

private void goButton_Click(object sender, System.EventArgs e)

{

webBrowser1.Navigate(new Uri(comboBox1.SelectedItem.ToString()));

}

 

Добавление обработчика событий для параметров MenuStrip.

Просмотр созданного Visual C# кода.

IDE Visual C# автоматически создает код инициализации. В представлении Код найдите конструктор для класса Form1. У него есть подпись public Form1().

Добавление собственного кода инициализации.

В заключение добавим в Form1 собственный код инициализации. Конструктор никогда не должен использоваться для вызова любого кода, который может вызвать исключение. Такой код должен располагаться в методе Form1_Load.

 

private void Form1_Load(object sender, EventArgs e)

{

comboBox1.SelectedIndex = 0;

webBrowser1.GoHome();

}

 

Пример эффективного применения – простой бинарный калькулятор.

 

 

                                                                                                                                                                                      


Поделиться:



Последнее изменение этой страницы: 2019-03-31; Просмотров: 211; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.021 с.)
Главная | Случайная страница | Обратная связь