Вопрос№32.Коллекции в языке C#. Группы объектов. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Вопрос№32.Коллекции в языке C#. Группы объектов.



В C# под коллекцией понимается некоторая группа объектов. Она упрощает реализацию многих задач в прог-и, предлагая уже готовые решения для построения структур данных.Коллекции разработаны на основе четко определенных интерфейсов, поэтому стандартизируют способы обработки групп объектов.В среде.Net Framework 3 основ. Коллекций: 1.общего назначения 2.специализированные 3.ориентированные на побитовую организацию данных. Коллекции общего назнач-я определены в пространстве имен System.Collection и реализуют структуры данных: стеки, очереди, динамические массивы хэш-таблиц, отсортированный список для хранения пар ключ/значения. Коллекции общего назначения работают с типами данных типа object. Коллекции специального назнач-я определены в пространстве имен System.Collection.Specialized и ориентированны на обработку данных конкретного типа или на обработку данных уникальным способом. В пространстве имен System.Collection определена единственная коллекция, ориентированная на побитовую организацию данных, которая служит для хранения групп битов и поддерживает такой набор операций, который не характерен для коллекций других типов. Коллекции общего назначения. Stack - Частный случай однонаправленного списка: последний пришел — первым вышел;Queue - Частный случай однонаправленного списка: первым пришел — первым вышел; ArrayList -динамич. массив, кот. при необходимости может увеличить свой размер; Hashtable --- Хэш-таблица для пар ключ/значение; SortedList - Отсортированный список пар ключ/значение. Абстрактный тип данных — список — это послед-ть данных a1, a1, …, an (n>=0) одного типа, кол-во элементов n называется длиной списка. Если n>0, то a1 — первый элемент списка, а an — последний. В случае, если n=0, то имеем пустой список, кот. не содержит элементов. Элементы линейно упорядочены в соответствии с их позицией в списке.Список называется однонаправленным, если каждый элемент списка содержит ссылку на следующий элемент. Если каждый элемент содержит 2 ссылки: одну на следующий элемент, другую на предыдущий, то такой список называется двунаправленным или двусвязным. А если последний элемент связать указателем с первым, то получится кольцевой список. Класс Stack — добавление элементов в который и выборка элементов из которого выполняется с одного конца, который называется вершиной стека. При выборке элемент исключается из списка. Др. операции над стеком не определены. Интерфейсы: 1.I.Collection 2.I.Unumerable 3.I.Cloneablе Конструкторы: 1.public Stack (); // созд-ся пустой стек, началь. вместимость кот. равна 10 2.public Stack (int capacity); // созд-ся пустой стек, начальная вместимость кот. равна capacity 3.public Stack (I.Collretion C); // создается пустой стек, кот. содержит элементы коллекции, заданные параметром С и аналогичной им вместимостью. Собственные методы: 1. Contains - Опред-ет, принадлежит ли элемент классу Stack 2.Clear -Удаляет все объекты из класса Stack 3.Peek - Возвращает самый верхний объект класса Stack, но не удаляет его. 4.Pop - Удаляет и возвращает верхний объект класса Stack.5.Push - Вставляет объект в начало класса Stack 6.ToArray - Копирует элементы класса Stack в новый массив. Абстрактный тип данных Queue – частный случай однонаправленного списка, добавление элементов в который выполняется в один конец (хвост), а выборка с другого (голова). Другие операции для очереди не определены, при выборке элемент исключается из очереди. Как и стек, очередь реализует те же интерфейсы. Очередь — динамич. коллекция,размер кот. изменяется. При необходимости увеличения вместимости очереди происходит с коэффициентом роста по умолчанию, равному двум. Конструкторы: 1.public Queue(); // созд-ся пустая очередь, началь. вместимость кот. Равна 32, 2.public Queue(int capacity); // созд-ся пустая очередь, начальная вместимость кот. равна capacity, 3.public Queue(int capacity, float n); // созд-ся очередь, кот. содержит элементы коллекции, коэффициент роста устанавливает параметр n, 4.public Queue(I.Collretion C); // созд-ся пустая очередь, кот. содержит элементы коллекции, заданные параметром С и аналогичной им вместимостью. Методы: 1.Contains -Опр-ет, принадлежит ли элемент классу Stack 2.Clear -Удаляет все объекты из класса Stack 3.Dequeue - Удаляет и возвращает объект в начале класса Queue 4.Enqueue- Добавляет объект в конец класса Queuе 5.Peek - Возвращает объект в начале класса Queue, но не удаляет его 6.ToArray- Копир. элементы класса Queue в новый массив 7.TrimToSize --- Задает значение емкости, равное действительному количеству элементов в классе Queue. Класс ArrayList В С# стандартные массивы имеют фиксированную длину, которая во время выполнения программы может изменяться. Класс ArrayList предназначен для поддержки динамических массивов, которые при необходимости могут увеличиваться или сокращаться. Любой объект класса ArrayList создается с некоторым начальным размером. При превышении этого размера, коллекция автоматически удваивается. В случае удаления объектов, массив можно сократить. Интерфейсы:1.I.Collection 2.I.Unumerable 3.I.Cloneable 4.I.List По мимо методов, реализуемых в этих интерфейсах, класс ArrayList реализует и свои собственные методы: AddRange - Добавляет элементы интерфейса ICollection в конец класса ArrayList BinarySearch - Перегружен. Использует алгоритм двоичного поиска для нахождения определенного элемента в отсортированном классе ArrayList или в его части. Св-во Capacity позволяет установить или узнать емкость вызывающего динамического массива типа ArrayList.

Вопрос№33.Сборки в языке C#. Структура сборки. Класс Assembly определяет Сборку – основной строительный блок Common Language Runtime приложения. Как строительный блок CLR, сборка обладает следующими основными свойствами: возможностью многократного применения; versionable (версифицированностью); самоописываемостью. Сборки бывают: 1. частными (private). Представляют наборы типов, которые могут быть использованы только теми приложениями, где они включены в состав. Располагаются в файлах с расширениями.dll (.exe) и.pdb (program debug Database). 2. общего доступа (shared). Также набор типов и ресурсов внутри модулей (модуль – двоичный файл сборки). Предназначены для использования НЕОГРАНИЧЕННЫМ количеством приложений на клиентском компьютере. Эти сборки устанавливаются не в каталог приложения, а в специальный каталог, называемый Глобальным Кэшем Сборок (Global Assembly Cache – GAC). Загружаемая сборка строится как БИБЛИТОТЕКА КЛАССОВ (файл с расширением.dll), либо как выполняемый модуль (файл с расширением.exe). Если это файл с расширением.dll, то в среде Visual Studio ее использование поддерживается специальными средствами среды. Это "полуавтоматическая" загрузка частной сборки в Reference приложения (Add Reference...). Сборки, располагаемые в.exe-файлах, особой поддержкой для включения сборки в состав приложения не пользуются. Ниже представлены некоторые члены класса сборки. Откр св-ва .1.CodeBase- Возвращает местонахождение сборки, указанное первоначально, например в объекте AssemblyName 2. EntryPoint- Возвращает точку входа для этой сборки 3. Evidence -Возвращает свидетельство для этой сборки 4. FullName - Возвращает отображаемое имя сборки. Открытые события ModuleResolve -Возникает, когда загрузчик классов общеязыковой среды выполнения не может обработать ссылку на внутренний модуль сборки, используя обычные средства. Защищенные методы 1. Finalize (унаследовано от Object) --- Переопределен. Позволяет объекту Object попытаться освободить ресурсы и выполнить другие завершающие операции, перед тем как объект Object будет уничтожен в процессе сборки мусора. В языках C# и C++ для функций финализации используется синтаксис деструктора 2. MemberwiseClone (унаследовано от Object) --- Создает неполную копию текущего Object.В ходе выполнения приложения класс Assembly позволяет:1.получать информацию о самой сборке; 2.обращаться к членам класса, входящим в сборку; 3.загружать другие сборки.

 

 

Вопрос№34.Обработка ошибок. Работа с исключениями. Одним из основных назначений.NET CLR является недопущение ошибок. Это достигается такими средствами, как автоматическое управление памятью и ресурсами в управляемом коде или хотя бы их обнаружение во время компеляции благодаря строгой типизированной системе. Однако, некоторые ошибки можно обнаружить только в период выполнения, а это значит, что для всех языков, соответствующих спецификации Common Language Specification должен быть предусмотрен единый метод реакции на ошибки. Обзор обработки исключений. Исключения — это условия, при которых нормальный вход в программу, т.е. последовательность вызовов методов в стеке вызовов, невохможен или нежелателен. Надо понимать разницу между исключениями и ожидаемыми событиями (скажем, обнаружение конца файла). Если имеется метод, который последовательно считывает файл, то такое событие не является исключительным, и оно не должно вызывать прерывания выполнения программы. Если идет попытка чтения файла, а ОС уведомляет о дисковой ошибке, то это искдючительная ошибка, именно такая, что может повлиять на нормальный ход работы метода при попытке продолжить считывание файла. Большинство исключений связаны и с другой проблемой — контекстом. Один метод обнаруживает наличие исключительной ситуации, но оказывается не в том контексте, чтобы реагировать на эту ошибку. Он сигнализирует исполняющей среде о наличии ошибки. Исполнительная среда последовательно проходит по стеку вызовов, пока не находит метод, способный правильно работать с ошибкой. Основной синтаксис обработки исключений При обработке исключений используются всего 4 ключевых слова: try, catch, throw, finally.Когда метод не может выполнить свою задачу, т.е. когда он определяет исключительную ситуацию, то он передает исключения вызывающему методу через ключевое слово throw. Вызывающий метод (если предположить, что он способен, т.е. обладает достаточным контекстом для работы с исключениями) полусает это исключение посредством ключевого слова catch и решает, что предпринять. Передача исключения. Чтобы методу уведомить вызовавший метод, что возникла ошибка, он использует ключевое слово throw [выражение] При передаче исключения необходимо передать объект типа System.Exception или произвольный класс. Улавливание (нахождение) исключения. Если метод может передавать исключению, то должна быть и обратная сторона, которая находит это исключение.Ключевое слово catch определяет блок кода, который выполняется при возникновении исключения данного типа. Содержащийся в блоке код называется обработчиком исключений. Не каждый метод должен иметь дело с каждым переданным исключением. Прежде всего потому, что метод модет не иметь контекста для адекватной обработки ошибки. Ошибка должна обрабатываться кодом, имеющим достаточный контекст, чтобы корректно осуществлять реакцию на ошибку. Для этого используются ключевые слова try и catch. Для обнаружения исключения нужно ограничить код блоком try, а затем указать какие типы исключений будут обрабатываться в блоке catch. Все операторы из блока try будут обрабатывать по порядку, только если один из методов не передаст исключение. Если это произойдет, то управление будет передано на соответствующую строку блока catch. При передаче исключения управление передается по стеку вызовов наверх, пока не будет найден блок catch для исключения данного типа. Если подходящий блок catch не обнаружен, то приложение прерывается. Следовательно, если один метод вызывает другой, передающий исключения, то структура приложения должна быть такой, что метод в стеке вызовов смог обрабатывать исключения. Повторная передача исключения. Случается, что метод, уловивший исключения и сделававший все,что он может в своем контексте, затем повторно передает исключение выше. Освобождение ресурсов с помощью finally. Один трудный вопрос с обработкой ошибок связан с тем, что код всегда зависит от того, уловлено ли исключение. Например, вы выделили ресурс такой, как физическое устройство или файл данных. Теперь предположим, что вы открыли этот ресурс и вызвали метод, передающий исключение. Независимо от того, может ли ваш метод прожолжить работу с ресурсом, вам в любом случае нужно освободить или закрыть ресурс. Здесь применяется ключевое слово finally. Оно позволяет избежать двойного кодирования, освобождения ресурсов в блоке catch и после блоков try/catch. Независимо от того, передано ли исключение, будет выполнен код в блоке finalу. Улавливание множества типов исключений. В различных ситуациях может потребоваться блок try{} для обнаружения исключения различных типов. Так, о методе может быть известно, что он передает исключение нескольких различных типов или в одном блоке try потребуется вызов нескольких методов, причем в каждом методе известно, что он передает исключение своего типа, тогда добавляется для каждого типа свой блок catch. Блок try не должен улавливать все возможные исключения, которые может послать содержащий в нем метод. CLR автоматически продолжает передавать управление вверх по стеку до тех пор пока не обнаружиться метод улавливающий исключение, промежуточные методы могут игнорировать исключения, которые они не могут обрабатывать. Проблема создания блоков catch. Единственное, что должно быть в блоке catch, - это код, который хотя бы частично улавливает исключение. Например, можно произвести некоторые действия, возможные на момент исключения и повторно передать его, чтобы возможной была его дальнейшая обработка.



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 188; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.63.87 (0.006 с.)