- •Введение Обзор .Net. Основные понятия
- •Программа на c#
- •Основы языка Пространство имён
- •Система типов
- •Класс и Структура. Первое приближение
- •Литералы. Представление значений
- •Арифметические литералы
- •Логические литералы
- •Символьные литералы
- •Символьные escape-последовательности
- •Строковые литералы
- •Операции и выражения
- •Приоритет операций
- •Приведение типов
- •Особенности выполнения арифметических операций
- •Особенности арифметики с плавающей точкой
- •Константное выражение
- •Переменные элементарных типов. Объявление и инициализация
- •Константы
- •Перечисления
- •Объявление переменных. Область видимости и время жизни
- •Управляющие операторы
- •Синтаксис объявления метода
- •Вызов метода
- •Перегрузка методов
- •Способы передачи параметров при вызове метода
- •Передача параметров. Ссылка и ссылка на ссылку как параметры
- •Сравнение значений ссылок
- •This в нестатическом методе
- •Свойства
- •Обработка исключений
- •Массив. Объявление
- •Инициализация массивов
- •Примеры инициализации массивов
- •Два типа массивов: Value Type and Reference Type
- •Встроенный сервис по обслуживанию простых массивов
- •Реализация сортировки в массиве стандартными методами
- •Подробнее о массивах массивов (jagged array)
- •Массивы как параметры
- •Спецификатор params
- •Main в классе. Точка входа
- •Создание объекта. Конструктор
- •Операция new
- •В управляемой памяти нет ничего, что бы создавалось без конструктора
- •Кто строит конструктор умолчания
- •This в контексте конструктора
- •Перегрузка операций
- •Синтаксис объявления операторной функции
- •Унарные операции. Пример объявления и вызова
- •Бинарные операции
- •Определение операций конъюнкция и дизъюнкции
- •И вот результат…
- •Пример. Свойства и индексаторы
- •Explicit и implicit. Преобразования явные и неявные
- •Наследование
- •Наследование и проблемы доступа
- •Явное обращение к конструктору базового класса
- •Кто строит базовый элемент
- •Переопределение членов базового класса
- •Наследование и new модификатор
- •Полное квалифицированное имя. Примеры использования
- •Прекращение наследования. Sealed спецификатор
- •Абстрактные функции и абстрактные классы
- •Ссылка на объект базового класса
- •Операции is и as
- •Виртуальные функции. Принцип полиморфизма
- •Интерфейсы
- •Делегаты
- •События
- •События и делегаты. Различия
- •Атрибуты, сборки, рефлексия Рефлексия (отражение) типов
- •Реализация отражения. Type, InvokeMember, BindingFlags
- •Атрибуты
- •Сборка. Класс Assembly
- •Класс сборки в действии
- •Разбор полётов
- •Класс System.Activator
- •Версия сборки
- •Файл конфигурации приложения
- •Общедоступная сборка
- •Игры со сборками из gac
- •Динамические сборки
- •Динамическая сборка: создание, сохранение, загрузка, выполнение
- •Ввод-вывод Базовые операции
- •Потоки: байтовые, символьные, двоичные
- •Предопределённые потоки ввода-вывода
- •Функция ToString()
- •Консольный ввод-вывод. Функции-члены класса Console
- •Консольный вывод. Форматирование
- •Функции вывода. Нестандартное (custom) форматирование значений.
- •Консольный ввод. Преобразование значений
- •Файловый ввод-вывод
- •Потоки Процесс, поток, домен
- •Домен приложения
- •Обзор пространства имён System.Threading
- •Многопоточность
- •Виды многопоточности
- •А кто в домене живёт…
- •Класс Thread. Общая характеристика
- •Именование потока
- •Игры с потоками
- •Характеристики точки входа дополнительного потока
- •Запуск вторичных потоков
- •Приостановка выполнения потока
- •Отстранение потока от выполнения
- •Завершение потоков
- •Метод Join()
- •Состояния потока (перечисление ThreadState)
- •Одновременное пребывание потока в различных состояниях
- •Фоновый поток
- •Приоритет потока
- •Передача данных во вторичный поток
- •Извлечение значений (данных) с помощью Callback методов
- •Организация взаимодействия потоков
- •1. Посредством общедоступных (public) данных
- •2. Посредством общедоступных (public) свойств
- •3. Посредством общедоступных очередей
- •Состязание потоков
- •Блокировки и тупики
- •Очереди. Основа интерфейса взаимодействия
- •Безопасность данных и критические секции кода
- •Пример организации многопоточного приложения
- •Очередь как объект синхронизации
- •Синхронизация работы потоков при работе с общими ресурсами
- •1. Организация критических секций
- •2. Специальные возможности мониторов
- •Рекомендации по недопущению блокировок потоков
- •Форма Класс Form
- •Форма: управление и события жизненного цикла
- •Форма: контейнер как элемент управления
- •Разница между элементами управления и компонентами.
- •Свойства элементов управления. Anchor и Dock
- •Extender providers. Провайдеры дополнительных свойств
- •Validating и Validated элементов управления
- •Управление посредством сообщений
- •Стандартный делегат
- •Делегат EventHandler
- •Класс Application
- •События класса Application
- •Примеры перехвата сообщений
- •Метод WndProc
- •Пример переопределения WndProc
- •Контекст приложения
- •Применение классов GraphicsPath и Region. Круглая форма
- •Собственные элементы управления
- •Литература
Сборка. Класс Assembly
Класс Assembly определяет Сборку – основной строительный блок common language runtime приложения. Как строительный блок clr, сборка обладает следующими основными свойствами:
возможностью многократного применения,
versionable (версифицированностью),
самоописываемостью.
Эти понятия являются ключевыми для решения проблемы отслеживания версии и для упрощения развертывания приложений во время выполнения.
Сборки обеспечивают инфраструктуру, которая позволяет во время выполнения полностью “понимать” структуру и содержимое приложения, и контролировать версии и зависимости элеметнов выполняемого приложения.
Сборки бывают:
частными (private). Представляют наборы типов, которые могут быть использованы только теми приложениями, в состав которых они входят. Располагаются в файлах с расширениями .dll (.exe) и .pdb (program debug Database). Для того чтобы использовать в приложении частную сборку, её надо ВКЛЮЧИТЬ в приложение, то есть, разместить в каталоге приложения (application directory) или в одном из его подкаталогов.
общего доступа (shared). Также набор типов и ресурсов внутри модулей (модуль – двоичный файл сборки). Предназначены для использования НЕОГРАНИЧЕННЫМ количеством приложений на клиентском компе. Эти сборки устанавливаются не в каталог приложения, а в специальный каталог, называемый Глобальным Кэшем Сборок (Global Assembly Cache - GAC). Этот каталог на платформе Windows XP имеет путь C:\WINDOWS\assembly. Таким образом, в .NET ВСЕ совместно используемые сборки собираются в одном месте. Имя (“общее имя” или “строгое имя”) сборки общего доступа строится с использованием информации о версии сборки.
Загружаемая сборка строится как БИБЛИТОТЕКА КЛАССОВ (файл с расширением .dll), либо как выполняемый модуль (файл с расширением .exe).
Если это файл с расширением .dll, то в среде Visual Studio её использование поддерживается специальными средствами среды. Это “полуавтоматическая” загрузка частной сборки в Reference приложения (Add Reference…). Сборки, располагаемые в .exe файлах, особой поддержкой для включения сборки не состав приложения не пользуется.
Для анализа сборки применяется утилита IlDasm.exe, которую можно подключить к непосредственно вызываемому из среды разработки VisualStudio списку утилит.
Ниже представлены члены класса Сборки.
Открытые свойства
CodeBase |
Возвращает местонахождение сборки, указанное первоначально, например, в объекте AssemblyName. |
EntryPoint |
Возвращает точку входа для этой сборки. |
EscapedCodeBase |
Возвращает URI, предоставляющий базовый код, включая escape-знаки. |
Evidence |
Возвращает свидетельство для этой сборки. |
FullName
|
Возвращает отображаемое имя сборки. |
GlobalAssemblyCache |
Возвращает значение, показывающее, была ли сборка загружена из глобального кэша сборок. |
ImageRuntimeVersion |
Возвращает версию общеязыковой среды выполнения (CLR), сохраненной в файле, содержащем манифест. |
Location |
Возвращает местонахождение в формате базового кода загруженного файла, содержащего манифест, если для него не было теневого копирования. |
Открытые методы
CreateInstance
|
Перегружен. Находит тип в этой сборке и создает его экземпляр, используя абстрактный метод. |
CreateQualifiedName |
Статический. Создает тип, задаваемый отображаемым именем его сборки. |
Equals (унаследовано от Object)
|
Перегружен. Определяет, равны ли два экземпляра Object. |
GetAssembly |
Статический. Возвращает сборку, в которой определяется заданный класс. |
GetCallingAssembly
|
Статический. Возвращает Assembly метода, который вызывает текущий метод выполнения. |
GetCustomAttributes |
Перегружен. Возвращает пользовательские атрибуты для этой сборки. |
GetEntryAssembly |
Статический. Возвращает процесс, исполняемый в домене приложения по умолчанию. В других доменах приложений это первый исполняемый процесс, который был выполнен AppDomain.ExecuteAssembly. |
GetExecutingAssembly
|
Статический. Возвращает Assembly, из которой исполняется текущий код. |
GetExportedTypes |
Возвращает экспортируемые типы, определенные в этой сборке. |
GetFile |
Возвращает объект FileStream для указанного файла из таблицы файлов манифеста данной сборки. |
GetFiles |
Перегружен. Возвращает файлы в таблице файлов манифеста сборки. |
GetHashCode (унаследовано от Object)
|
Служит хеш-функцией для конкретного типа, пригоден для использования в алгоритмах хеширования и структурах данных, например в хеш-таблице. |
GetLoadedModules |
Перегружен. Возвращает все загруженные модули, являющиеся частью этой сборки. |
GetManifestResourceInfo |
Возвращает информацию о способе сохранения данного ресурса. |
GetManifestResourceNames
|
Возвращает имена всех ресурсов в этой сборке. |
GetManifestResourceStream
|
Перегружен. Загружает указанный ресурс манифеста из сборки. |
GetModule |
Возвращает указанный модуль этой сборки. |
GetModules
|
Перегружен. Возвращает все модули, являющиеся частью этой сборки. |
GetName
|
Перегружен. Возвращает AssemblyName для этой сборки. |
GetObjectData |
Возвращает сведения сериализации со всеми данными, необходимыми для повторного создания этой сборки. |
GetReferencedAssemblies |
Возвращает объекты AssemblyName для всех сборок, на которые ссылается данная сборка. |
GetSatelliteAssembly
|
Перегружен. Возвращает сопутствующую сборку. |
GetType
|
Перегружен. Возвращает объект Type, предоставляющий указанный тип. |
GetTypes
|
Возвращает типы, определенные в этой сборке. |
IsDefined |
Показывает, определен ли пользовательский атрибут, заданный указанным значением Type. |
Load
|
Статический. Перегружен. Загружает сборку. |
LoadFile |
Статический. Перегружен. Загружает содержимое файла сборки. |
LoadFrom
|
Статический. Перегружен. Загружает сборку. |
LoadModule |
Перегружен. Загружает внутренний модуль этой сборки. |
LoadWithPartialName |
Статический. Перегружен. Загружает сборку из папки приложения или из глобального кэша сборок, используя частичное имя. |
ToString
|
Переопределен. Возвращает полное имя сборки, также называемое отображаемым именем. |
Открытые события
ModuleResolve |
Возникает, когда загрузчик классов общеязыковой среды выполнения не может обработать ссылку на внутренний модуль сборки, используя обычные средства. |
Защищенные методы
Finalize (унаследовано от Object)
|
Переопределен. Позволяет объекту Object попытаться освободить ресурсы и выполнить другие завершающие операции, перед тем как объект Object будет уничтожен в процессе сборки мусора. В языках C# и C++ для функций финализации используется синтаксис деструктора. |
MemberwiseClone (унаследовано от Object) |
Создает неполную копию текущего Object. |