Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Коллекции пространства имен System.Collections




Интерфейсы пространства имен System.Collections

ICollection Определяет общие характеристики для набора элементов

IComparer Позволяет сравнивать два объекта

IDictionary Позволяет представлять содержимое объекта в виде пар «имя—значение»

IDictionaryEnumerator Используется для нумерации содержимого объекта, поддерживающего интерфейс IDictionary

IEnumerable Возвращает интерфейс IEnumerator для указанного объекта

IEnumerator Обычно используется для поддержки оператора foreach в отношении объектов

IHashCodeProvider Возвращает хеш-код для реализации типа с применением выбранного пользователем алгоритма хеширования

IList Поддерживает методы добавления, удаления и индексирования элементов в списке объектов

ArrayList Массив, динамически изменяющий свой размер

BitArray Компактный массив для хранения битовых значений

Hashtable Хеш-таблица

Queue Очередь

SortedList Коллекция, отсортированная по ключам. Доступ к элементам — по ключу или по индексу

Stack Стек

 

Основным недостатком обычных массивов является то, что объем памяти, обходимый для хранения их элементов, должен быть выделен до начала раб с массивом. Класс ArrayList позволяет программисту не заботиться о выделе памяти и хранить в одном и том же массиве элементы различных типов.

По умолчанию при создании объекта типа ArrayLi st строится массив из 16 элементов типа object. Можно задать желаемое количество элементов в массиве, передав его в конструктор или установив в качестве значения свойства Capacity

Основные элементы класса ArrayList

Capacity Свойство Емкость массива

Count Свойство Фактическое количество элементов массива

Item Свойство Получить или установить значение элемента по заданному индексу

Add Метод Добавление элемента в конец массива

AddRange Метод Добавление серии элементов в конец массива

BinarySearch Метод Двоичный поиск в отсортированном массиве или его части

Clear Метод Удаление всех элементов из массива

 

Класс ArrayList реализован через класс Array, то есть содержит закрытое поле этого класса.

Поскольку все типы в С# являются потомками класса object, массив может содержать элементы произвольного типа. Даже если в массиве хранятся обычные целые числа, то есть элементы значимого типа, внутренний класс является массивом ссылок на экземпляры типа object, которые представляют собой упакованный тип-значение. Соответственно, при занесении в массив выполняется упаковка, а при извлечении — распаковка элемента.

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

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

 

27) Классы-прототипы.

Возможность отделить алгоритмы от типов данных предоставляют классы-прототипы— классы, имеющие в качестве параметров типы данных. Чаще всего эти классы применяются для хранения данных, то есть в качестве контейнерных классов, или коллекций.

Во вторую версию библиотеки.NET добавлены параметризованные коллекции для представления основных структур данных, применяющихся при создании программ, — стека, очереди, списка, словаря и т. д. Эти коллекции, расположенные в пространстве имен System.Collections.Generic, дублируют аналогичные коллекции пространства имен System.Collections, рассмотренные в разделе «Пространство имен System.CoIlections»

Параметром класса-прототипа является тип данных, с которым он работает. Это избавляет от перечисленных недостатков.

Создание конкретного экземпляра класса-прототипа называется инстанцированием. Класс-прототип может содержать произвольное количество параметров типа. Для каждого из них могут быть заданы ограничения (constraints), указывающие, каким требованиям должен удовлетворять аргумент, соответствующий этому па­ раметру, например, может быть указано, что это должен быть значимый тип или тип, который реализует некоторый интерфейс.

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

 

28) Обобщенные методы. Частичные типы. Обнуляемые типы.

 

Стандартные методы сортировки реализуют алгоритмы, которые хороши для большинства применений, но не для всех, поэтому может возникнуть необходимость реализовать собственный метод.

Параметризованные типы и методы позволяют:

• описывать способы хранения и алгоритмы обработки данных независимо от типов данных;

• выполнять контроль типов во время компиляции, а не исполнения программы;

• увеличить скорость обработки данных за счет исключения операций упаковки, распаковки и преобразования типа.

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

Параметризованные делегаты позволяют создавать обобщенные алгоритмы, логику которых можно изменять передаваемыми в качестве параметров делегатами.

Во вторую версию языка введена возможность разбивать описание типа на части и хранить их в разных физических файлах, создавая так называемые частичные типы (partial types). Это может потребоваться для классов большого объема или, что более актуально, для отделения части кода, сгенерированной средствами среды, от написанной программистом вручную. Кроме того, такая возможность облегчает отладку программы, позволяя отделить отлаженные части класса от новых.

Для описания отдельной части типа используется модификатор partial. Он может применяться к классам, структурам и интерфейсам.

Если частичный тип является наследником нескольких интерфейсов, в каждой части не требуется перечислять все интерфейсы: обычно в одной части объявляется один интерфейс и описывается его реализация, в другой части — другой интерфейс и т. д. Набором базовых интерфейсов для типа, объявленного в нескольких частях, является объединение базовых интерфейсов, определенных в каждой части.

Один из способов заключается в том, чтобы присвоить переменной какое-либо значение, не входящее в диапазон допустимых для нее.

В версии С# 2.0 указанная проблема решается введением типов специального вида, называемых обнуляемыми (nullable). Обнуляемый тип представляет собой структуру, хранящую наряду со значением величины (свойство Value) логический признак, по которому можно определить, было ли присвоено значение этой величине (свойство HasValue).

 

29) Основные особенности Windows-приложений.

Основные особенности Windows как характерного и широко распространенного представителя современных операционных систем.

• Многозадачность — это возможность одновременно выполнять несколько приложений. Операционная система обеспечивает разделение ресурсов: каждому приложению выделяется свое адресное пространство, распределяется процессорное время и организуются очереди для доступа к внешним устройствам.

• Независимость программ от аппаратуры. Для управления аппаратными средствами любое приложение обращается к операционной системе, что обеспечивает независимость от конкретных физических характеристик устройств: при смене устройства никакие изменения в программу вносить не требуется. Управление внешними устройствами обеспечивается с помощью драйверов.

• Стандартный графический интерфейс с пользователем. Основное взаимодействие с пользователем осуществляется в графическом режиме. Каждое приложение выполняет вывод в отведенную ему прямоугольную область экрана, называемую окном. Окно состоит из стандартных элементов. Библиотеки входят в состав систем программирования. Интерфейсные компоненты обращаются к аппаратуре не непосредственно, а через функции операционной системы. В основе пользовательского интерфейса Windows лежит представление экрана как рабочего стола, на котором располагаются окна\приложений, ярлыки и меню. Приложение может иметь несколько окон, одно из них является главным. При закрытии главного окна приложение завершается.

• Поддержка виртуального адресного пространства для каждого приложения. Каждому приложению доступно пространство адресов оперативной памяти \ размером до 4 Гбайт1. Операционная система отображает его на физические, адреса и обеспечивает защиту приложений друг от друга. В разных версиях Windows защита выполняется с различной степенью надежности.

• Возможность обмена данными между приложениями. Приложения могут обмениваться данными через буфер обмена или используя другие механизмы, например OLE (Object Linking and Embedding — связывание и внедрение объектов) или именованные программные каналы.

• Возможность запуска старых программ. В 32-разрядных версиях Windows можно выполнять 16-разрядные Windows-программы, а также программы, написанные под MS-DOS. Последние запускаются в так называемой виртуальной DOS-машине, которая создает у программы полное «впечатление» того, что она выполняется под управлением MS-DOS в монопольном режиме.

• Принцип событийного управления

 

 

30) Событийно-управляемое программирование.

В основу Windows положен принцип событийного управления. Это значит, что и сама система, и приложения после запуска ожидают действий пользователя и реагируют на них заранее заданным образом. Любое действие пользователя (нажатие клавиши на клавиатуре, щелчок кнопкой мыши, перемещение мыши) называется событием.

Структура программы, управляемой событиями

Инициализация

обратотчик событий

Завершение

подпрограмма 1

подпрограмма n

события

Событие воспринимается Windows и преобразуется в сообщение — запись, содержащую необходимую информацию о событии. Сообщения могут поступать не только от пользователя, но и от самой системы, а также от активного или других приложений. Определен достаточно широкий круг стандартных сообщений, образующий иерархию, кроме того, можно определять собственные сообщения.

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

 

31) Шаблон Windows-приложения.

Создаем новый проект (File • New • Project), выбрав шаблон Windows Application. После сформирует шаблон Windows-приложения. Появляется вкладка заготовки формы Form1.cs[Design], расположенная в основной части экрана. Форма представляет собой окно и предназначена для размещения компонентов — меню, текста, кнопок, списков, изображений и т. д. Среда создает не только заготовку формы, но и шаблон текста приложения. Перейти к нему можно, щелкнув в окне Solution Explorer (View • Solution Explorer) правой кнопкой мыши на файле Form.cs и выбрав в контекстном меню команду View Code. При этом откроется вкладка с кодом формы. Приложение начинается с директив использования пространств имен библиотеки.NET. Для пустой формы, не содержащей ни одного компонента, необходимыми являются только две директивы:

using System;

using System.Windows.Forms;

Остальные директивы добавлены средой «на вырост».




Поделиться с друзьями:


Дата добавления: 2017-01-13; Просмотров: 342; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.