Коллекции. Пространство имен System.Collections Наиболее простой вариант набора элементов — это массив System. Array. Он уже обладает весьма полезными.

Slides:



Advertisements
Similar presentations
EXtreme Programming XP Тема 3. XP Пусть есть некоторая информационная система для банков. В качестве основной валюты для расчетов используется доллар,
Advertisements

Выпускная квалификационная работа на тему: «Применение интернет-технологий как фактор повышения эффективности функционирования организации (на примере.
ЗАРЯДКА НА АНГЛИЙСКОМ ЯЗЫКЕ.  Зарядка на уроке английского языка может стать самым любимым и веселым занятием для детей, при том, что она проходит исключительно.
ООП Классы. Данные отдельно, методы отдельно struct Node { Node* next; void* data; }; struct List { Node* first; int size; }; void* allocate() { … } void.
Составила: Галина Форбрегд. * В языке есть устойчивые сочетания слов. Их мы называем фразеологизмами..
Астрометрические каталоги К.В.Куимов, ГАИШ МГУ. Определение астрометрического каталога Астрометрический каталог – понятие неопределённое. Например, это.
Схема распределения грантов городам-участникам программы Тасис (TCAS) Экологические гранты для муниципалитетов.
Разработка программного обеспечения (Software Engineering) Ian Sommervillle Часть 4. Реализация ПО: Проектирование с повторным использованием компонентов.
Поиск оптимального набора параметров оптимизаций компилятора Брусенцов Леонид Евгеньевич студент 4 курса ФИТ НГУ Руководители:Илья.
Автоматическая генерация кода программ с явным выделением состояний Канжелев С.Ю. магистрант СПбГУ ИТМО Шалыто А.А. доктор технических наук профессор СПбГУ.
Системы с наследованием. Если систему можно представить в виде : Где - непрерывные функции, то такая система называется системой с наследованием. Математическое.
Системы отбора. Условные обозначения (1) (2) (3) (4) (5) (6) (7) Математическое моделирование процессов отбора2.
Савенко Мария Олеговна, 361 группа Научный руководитель: старший преподаватель В.С.Полозов.
R1R2R3R4R5R6R7R1R2R3R4R5R6R7. Аксиома R 1. В пространстве существуют плоскости. В каждой плоскости пространства выполняются все аксиомы планиметрии.
Астащенко Александр, 445 группа Научный руководитель: В.Г.Шистеров.
Тел. (495) Москва, а/я 212 Рабочая группа по реформе МВД Москва, 2010 Новикова Асмик, Фонд «Общественный вердикт»
Некомпенсаторное агрегирование и рейтингование студентов Авторы: Гончаров Алексей Александрович, Чистяков Вячеслав Васильевич. НФ ГУ ВШЭ 2010 год.
АВДАШЕВА СВЕТЛАНА КАФЕДРА ЭКОНОМИЧЕСКОГО АНАЛИЗА ОРГАНИЗАЦИЙ И РЫНКОВ 2011/2012 УЧЕБНЫЙ ГОД Теория отраслевых рынков (по выбору для 3 курса факультета.
Учитель математики Кулакова Т.М. МОУ ООШ №15 г.о Новокуйбышевск Самарской области Сентябрь 2011г.
Преподаватель: Арутюнова Е. В. (ст.преп.) Выполнила: студентка 1 курс ФЖ Манаенкова Елена Москва, 2010.
Что за хулиган толкает пассажиров автобуса то вперед, то назад? Этот хулиган, вернее, хулиганка -
Российский государственный педагогический университет им. А.И. Герцена ИНСТИТУТ ДОВУЗОВСКОЙ ПОДГОТОВКИ Дистанционное обучение «Русский язык. Подготовка.
ООП Классы – 2. Ссылки Ссылка – еще одно имя объекта. Используйте ссылки вместо указателя. Это более безопасно. Complex c(10,10); Complex c2& = c; c2+=10;
Делегаты. Как созданные объекты могут посылать сообщения тем объектам, которые их породили? При программировании под Windows на С и C++ основное средство.
Блок 3. Семейства белков I. Множественное выравнивание Первый курс, весна 2008, А.Б.Рахманинова.
Особенности Java. Блок static static { } Создание и уничтожение объектов  new – создание объекта  finalyze()
1 Генерация контекстных ограничений для баз данных Выполнил: Жолудев В. Научный руководитель: Терехов А.Н. Рецензент: Иванов А.Н.
Михаил Налётов Активные продажи на сайте. Может ли ваш сайт работать еще эффективнее?
Анатомия класса. Схожесть с др. языками   С# похож на язык Java в том, что он требует, чтобы вся программная логика была заключена в определения типов.
Ввод-вывод в C# Сериализация.
МИЭФ: от homo obyknovenikus к homo ready-to-work-in-IB-nikus МИЭФ: от homo obyknovenikus к homo ready-to-work-in-IB-nikus.
Сравнение различных методов хранения XML в реляционных базах данных и в разных системах. Нгуен Тхань Хуен- 545 группа Руководитель : Б.А. Новиков Рецензент:
1 Ребенок в Сети. Ребенок играет?
PHP как язык программирования. Типы данных логические величины int, integer – целые числа real, double, float – вещественные числа string – строки array.
"The European Molecular Biology Open Software Suite"
Формантный синтезатор речи. Часть 1. Полюсы и нули – иное понимание Полюс – это пара чисел (B, F), B – ширина форманты, F – частота форманты Нуль – это.
1 Влияние машинной архитектуры Структура и принципы работы компьютера На разрабатываемый язык программирования машинная архитектура влияет двояко: –непосредственно.
Деревья и их представление в STL Презентацию подготовила Чиркова Ольга, 2 подгруппа, группа 271ПИ.
Пользовательские действия (custom actions) в JSP. JSTL.
Кураева Екатерина Анатольевна, заместитель директора по УВР, учитель математики сш № 29.
Наследование и полиморфизм. «Быть» или «Иметь» а так же «Точно» или «Как получится»
Рейтинги рекламных мест в различных сегментах Ольга Петрова Интернет-агентство TRAFFIC Конференция «Интернет-маркетинг 2009» 14 ноября.
Методы анализа данных. Статистическая проверка гипотез.
События. События Важная роль делегатов заключается в том, что на них основана модель событий С#. Применение событий вовсе не ограничено приложениями с.
Работа с массивами в C#.
Управляемые провайдеры ADO.NET Подключение к базам данных.
Хеш- алгоритмы Хеш - функции. Хеш- функция Хеш- это функция, которая ставит в соответствие небольшой, фиксированного размера объем двоичных данных произвольному,
1 (с) ИТЛаб, ННГУ, ВМК, 2003г Java 2 Micro Edition Жерздев С.В. Java 2 Micro Edition Лаборатория информационных технологий (ИТЛаб) При поддержке фирмы.
ВВЕДЕНИЕ В ВЫЧИСЛИТЕЛЬНУЮ МАТЕМАТИКУ Лекция 5 6 октября 2009 ВЫЧИСЛИТЕЛЬНАЯ ЛИНЕЙНАЯ АЛГЕБРА.
Семафоры-счетчики POSIX Программирование с использованием POSIX thread library.
Анализ и оптимизация плана работ и стоимости проекта.
Множественное выравнивание С.А.Спирин, весна
Visual Basic 7 Объектно-ориентированный язык программирования.
Учитель Антонова О.Я. Учитель Антонова О.Я. Зерноградская поликлиника.
XML Схемы XML документов. XML Schema созданая Microsoft позволяет избавиться от DTD блоков. Основа – использование пространств имен и очень точная типизация.
Обработка исключений в C# Единая техника обнаружения ошибок времени выполнения и передачи информации о них.
Writing Friendly Letters A Write On Activity. Friendly letters have five parts: 1. The Heading 2. The Salutation (greeting) 3. The Body (some paragraphs)
Объектные интерфейсы (.NET) «Школа Инноваций InterSystems 2007»
ORM Паттерны. Repository Repository (хранилище) ― выступает в роли посредника между слоем домена и слоем отображения данных, предоставляя интерфейс в.
Saint Petersburg, 2011 Java Lecture Generics. Quiz ArrayList lst = new ArrayList(); Collection c = lst; lst.add("one"); lst.add(“two"); lst.add(“three");
Microsoft Developer Tour Технологическая экспедиция msdevtour.ru.
Стеки и очереди 1. Абстрактный стек public interface Stack { static class Underflow extends Exception { public Underflow() { super("Stack underflow");
FAMILIES AND FRIENDS: ARE WE HAPPY TOGETHER?. HOLIDAYS ARE A TIME FOR ADVENTURES AND DISCOVERIES.
«Центр Разработки и Внедрения Террасофт Поволжье»
‘For and Against’ Essays Useful tips. Plan Introduction - Paragraph 1 (state topic – summary of the topic without giving your opinion) Main Body – Paragraph.
Опыт Технопарка БНТУ по разработке проектной заявки Что скрывает CBHE? Томашевич Наталия Юрьевна Руководитель Центра МНТС Научно-технологический парк БНТУ.
Jokes Jokes Jokes Teacher: Where's your text book? Student: At home. Teacher: What's it doing there? Student: Having a.
November CTP Андрей Коршиков MCP-клуб, Краснодар Декабрь 2009.
Сортировка, поиск и фильтрация данных в базе данных и выборках
Presentation transcript:

Коллекции

Пространство имен System.Collections Наиболее простой вариант набора элементов — это массив System. Array. Он уже обладает весьма полезными встроенными функциями, которые позволяют производить операции сортировки, клонирования, перечисления и расстановки элементов в обратном порядке. Однако создатели библиотеки базовых классов С# приготовили для нас большое количества встроенных типов, которые позволят сэкономить массу времени при решении часто встречающихся задач. Все эти типы, как следует из самого названия System.Collections, предназначены для работы с наборами элементов.

Первое, о чем необходимо сказать, это то что — в System.Collections определен набор стандартных интерфейсов. Кроме того, эти же интерфейсы определены в большинстве классов System.Collections. Краткий перечень наиболее важных интерфейсов пространства имен System.ColIections представлен в таблице. Но сначала поговорим об «отношениях» этих интерфейсов. Многие интерфейсы объединены в иерархии, когда как некоторые существуют отдельно и независимо от остальных. Отношения наследования представлены на рисунке.

Схема отношений наследования

Теперь приведем краткий перечень интерфейсов…

Интерфейсы пространства имен System.Collections ИнтерфейсНазначение ICollectionОпределяет общие характеристики (например, только для чтения и т. д.) для класса-набора элементов IComparerПозволяет сравнивать два объекта IDictionaryПозволяет представлять содержимое объекта в виде пар имя — значение IListОбеспечивает методы для добавления, удаления и индексирования элементов в списке объектов

Интерфейсы пространства имен System.Collections ИнтерфейсНазначение IDictionary Enumerator Используется для нумерации содержимого объекта, поддерживающего IDictionary lEnumerableВозвращает интерфейс lEnumerator для указанного объекта lEnumeratorОбычно используется для поддержки конструкции foreach в отношении объектов IHashCodeProviderВозвращает хэш-код для реализации типа с применением выбранного пользователем алгоритма хэширования

Теперь представим наиболее используемые классы…

Классы System.Collections КлассНазначение Важнейшие из реализованных интерфейсов ArrayList Динамически изменяющий свой размер массив объектов IList, ICollection, lEnumerable Hashtable Представляет набор взаимосвязанных ключей и значений, основанных на хэш-коде ключа. IDictionary, ICollection, lEnumerable и ICIoneable. Кроме того, у типов, которые предназначены для хранения в Hashtable, всегда должен быть замещен метод System, Object- GetHashCodeQ Queue Стандартная очередь, реализованная по принципу FIFO (first-in-first-out, « первым пришел, первым ушел » ) ICollection, ICIoneable и lEnumerable

Классы System.Collections КлассНазначение Важнейшие из реализованных интерфейсов Sorted List Аналогично словарю, однако к элементам можно также обратиться по их порядковому номеру(индексу) IDictiOtiary, ICollection, lEnumerable и ICIoneable Stack Очередь, реализованная по принципу UFO (last-in-first-out, « последним пришел, первым ушел » ), обеспечивающая возможности по проталкиванию данных в стек, выталкиванию данных из стека и считыванию данных ICollection и lEnumerable

Пространство имен System.Collections.Specialized Если ни один из классов, представленных в пространстве имен System.Collection, вам не подходит, есть смысл заглянуть в пространство имен System.Collections.Specialized. В этом пространстве имен определен свой набор типов для работы с наборами элементов. Как видно из названия пространства имен, эти типы предназначены для специальных случаев. В качестве примера можно назвать типы StringDIctionary и ListDictionary, которые специальным образом реализуют интерфейс IDictionary.

Применение ArrayList При ближайшем рассмотрении классов, определенных в пространстве имен System.Collections, выясняется, что они обладают очень схожей функциональностью и реализуют одни и те же интерфейсы. Поэтому вместо того, чтобы углубляться в подробности реализации каждого из классов, мы подробно разберем применение лишь одного из них — System.Collections.ArrayList,

Для того чтобы воспользоваться возможностями ArrayList, мы применим не классическое наследование, а модель включения - делегирования, когда класс ArrayList будет вложен внутрь созданного ранее класса Cars). Фактически единственное, что мы должны сделать, — реализовать в Cars набор открытых методов, которые будут передавать вызовы на выполнение различных действий (делегировать) внутреннему классу carList, производному от ArrayList.

Выглядеть всё это будет так: //Нам больше не нужно реализовывать lEnumerator - все уже сделано за нас в ArrayList public class Cars: IEnumerable { // Это - тот самый внутренний класс, который и будет делать всю работу private ArrayList carList: // Создаем объект класса carList при помощи конструктора Cars public Cars() {carLlst = new ArrayLis():} // Реализуем нужные нам методы для приема вызовов извне и передачи их carList // Метод для вставки объекта Саг public void AddCar(Car с) { carList.Add(c); } // Метод для удаления объекта Саг public void RemoveCar(int carToRemove) { carList.RernoveAt(carToRemove); }

// Свойство, возвращающее количество объектов Car public int CarCount { get { return carList.Count; } } // Метод для очистки объекта - удаления всех объектов Саг public void ClearAllCarsO { carList.Clear(); } // Метод. который отвечает на вопрос - есть ли уже в наборе такой объект Саг public bool CarlsPresent(Car с) { return carList.Contains(c); } // А все, что связано с реализацией lEnumerator, мы просто перенаправляем в carList public lEnumerator GetEnumerator() { return carList.GetEnumerator(); } }

А теперь покажем, что такое объявление проще использовать… public static void Main() { Cars carLot = new Cars(); // Чтобы было с чем работать, добавляем несколько объектов Саг carLot.AddCar( new Саг("Jasper", )); carLot.AddCar( new Car("Mandy, )); carLot.AddCar( new CarCPorker". 90, 90)); carLot.AddCar( new CarC'Jimbo", 40, 4)); // Выводим информацию о каждом классе при помощи конструкции foreach Console.WriteLine('You have {0} in the lot; \n". carLot.CarCount); foreach (Саг с in carLot) { Console.WriteLine('Name: {0}', c.PetName): Console.WriteLine('Max speed; {0}\n". c.MaxSpeed); }

// Удаляем одну из машин carLot.RemoveCar(): Console.WriteLine('You have {0} in the lot.Xn “, carLot.Car-Count): // Добавляем еще одну машину и проверяем ее наличие в наборе Саг temp = new Car("Zippy", ); CarLot.AddCar(temp); If(carLot.CarlsPresent(temp)) Console.WriteLine(ternp.PetName + " is already in the lot."); car-Lot.ClearAllCar(): Console.WriteLine('You have {0} In the 1ot.\n", carLot.Car-Count"}; }

Результат В результате работы программы мы получим:

Вместо заключения… Теперь настало время ответить на вопрос — а почему нельзя просто произвести класс Cars от ArrayList? Зачем потребовалось все усложнять и создавать внутри Cars вспомогательный класс и дополнительные методы? Ответ очень прост — ArrayList сам по себе работает с любыми объектами. Это значит, что при использовании классического наследования класс Cars можно было бы заполнить объектами абсолютно любых типов С#.