Что такое Microsoft.NET?


Классы каркаса .NET Framework


Классы каркаса NET Framework
Классы каркаса .NET Framework Невозможно описать в одной главе, или даже в одной книге, все классы каркаса .NET Framework. Хотя и не полностью, классы .NET охватывают большую часть интерфейса 32...
Сериализация или преобразование в последовательную форму
Сериализация, или преобразование в последовательную формуСохранение сложной структуры данных со связанными объектами может стать довольно громоздким при использовании классов File (Файл) и Stream...
Объекты сериализации
Объекты сериализации Хотя каркас знает, как сохранять объект, помеченный атрибутом Serializable (Преобразуемый в последовательную форму), но все же необходимо определить формат, в котором будет...
ISerializable
ISerializable Иногда методов преобразования в последовательную форму (сериализации), предоставляемых каркасом, недостаточно. В таком случае можно предусмотреть специальную сериализацию класса. Д...
Модель приложений NET
Модель приложений .NET Сериализация дала конкретный пример гибкости среды каркаса .NET Framework, используемой при написании кода. Теперь давайте рассмотрим модель, в которой выполняются .NET-прил...
Потоки
Потоки Поток — фактически выполняемая ветвь кода программы. Один или более потоков, запущенных внутри процесса, делают возможным сосуществование многочисленных выполняемых ветвей в рамках одного п...
Синхронизация потоков
Синхронизация потоков Приложение может создать несколько потоков. Сейчас мы рассмотрим код на шаге 1 из примера Threading (Организация поточной обработки). Теперь несколько запросов о резервирован...
Синхронизация с помощью мониторов
Синхронизация с помощью мониторов Класс System: :Threading: :Monitor (Система::Организация поточной об-работки::Монитор) позволяет потокам синхронизировать доступ к объектам, чтобы избежать наруше...
Уведомление с помощью мониторов
Уведомление с помощью мониторов Поток, овладевший замком монитора Monitor (Монитор), может, не покидая блока синхронизации, ожидать сигнал от другого потока, который выполняет операцию синхронизац...
Классы синхронизации
Классы синхронизации Каркас .NET Framework содержит классы, представляющие собой стандартные в Win32 объекты синхронизации. Все эти классы являются производными от абстрактного класса WaitHandle....
Автоматическая синхронизация
Автоматическая синхронизация Атрибуты можно использовать для синхронизации доступа к методам экземпляра (нестатическим) и нестатическим полям класса. Доступ к статическим полям и методам не синхро...
Изоляция потоков
Изоляция потоков Исключение, сгенерированное одним потоком, не приведет к отказу в работе другого потока. Пример Threadlsolation демонстрирует это. _gc class tm // класс сборщика мусора tm { publi...
Синхронизация коллекций
Синхронизация коллекций Некоторые списки, например TraceListeners, являются безопасными с точки зрения работы с потоками. Во время изменения этой коллекции изменяется копия и устанавливается ссылк...
Контекст
Контекст И Чтобы понять, как с помощью атрибутов среда времени выполнения реализует требования организации поточной обработки, мы должны ввести понятие контекста. Шаг 4 из примера Threading (Орган...
Заместители и заглушки
Заместители и заглушки Как же во время выполнения удается удовлетворить различные требования различных контекстов? Когда какой-нибудь объект располагается в другом контексте (например, объект Hote...
ContextBoundObject
ContextBoundObject Класс Broker (Брокер) должен быть производным от класса ContextBoundObject, чтобы во время выполнения можно было определить, требуется ли установить новый контекст. Если бы клас...
Метаданные и отражение
Метаданные и отражение Пример Serialization (Сериализация) из главы 2 "Основы технологии .NET" демонстрирует, как благодаря метаданным общеязыковая среда времени выполнения CLR поддержив...
Изоляция приложений
Изоляция приложений При написании приложений часто возникает ситуация, когда необходимо изолировать части приложения так, чтобы сбой в одной из частей не приводил к отказу в остальной части прилож...
Прикладная область
Прикладная область Прикладная область .NET (Application Domain, иногда называемая AppDomain) — это более простой способ изоляции приложений, безопасный и устойчивый к ошибкам. В рамках одного проц...
Прикладные области и сборки
Прикладные области и сборки Приложение компонуется из одной или нескольких сборок. Но каждая сборка загружается в какую-либо прикладную область. Каждая прикладная область может быть выгружена из п...
Класс AppDomain (Прикладная область)
Класс AppDomain (Прикладная область) Класс AppDomain (Прикладная область) реализует абстракцию прикладной области. Пример AppDomain (Прикладная область) иллюстрирует использование прикладных облас...
События AppDomain (Прикладная область)
События AppDomain (Прикладная область) Для поддержки изоляции приложений класс AppDomain (Прикладная область) позволяет устанавливать обработчики для следующих событий: выгрузка прикладной област...
Пример AppDomain (Прикладная область)
Пример AppDomain (Прикладная область) При выполнении примера AppDomain (Прикладная область) получается выдача, показанная на Рисунок 8.1....
Выдача в примере AppDomain (Прикладная область)
Рисунок 8.1. Выдача в примере AppDomain (Прикладная область) Сначала выводится имя, поток и контекст прикладной области, заданной по умолчанию AppDomain *currentDomain = AppDomain:: CurrentDomam;...
Маршализация прикладные области и контексты
Маршализация, прикладные области и контексты По умолчанию объекты копируются из одной прикладной области в другую (передаются по значению). В разделе "Удаленный доступ" показано, как про...
Асинхронное программирование
Асинхронное программирование .NET поддерживает шаблон проектирования для асинхронного программирования. Этот шаблон используется во многих местах .NET (включая операции ввода-вывода, как было отме...
Асинхронные шаблоны проектирования
Асинхронные шаблоны проектирования Такой шаблон проектирования состоит из двух частей: набора методов и интерфейса lAsyncResult. Методы шаблона имеют следующий вид: lAsyncResult *BeginXXX( [InputP...
LAsyncResult
lAsyncResult Метод BeginXXX (такой как BeginRead) возвращает lAsyncResult. Следующий интерфейс содержит четыре элемента: public _gc _interface lAsyncResult // сборщик мусора - интерфейс lAsyncResu...
Класс туре (Тип)
Класс туре (Тип) Абстрактный класс Туре (Тип) в пространстве имен System (Система) определяет типы .NET. Поскольку в .NET нет никаких функций вне классов или глобальных переменных, то получив все...
Использование делегатов в асинхронном программировании
Использование делегатов в асинхронном программировании Каждый разработчик объектов .NET, желающий предоставить асинхронный интерфейс, должен следовать только что описанному шаблону. Однако большин...
Вызов (invoke) начала (Begin) и конца (End)
Вызов (invoke) начала (Begin) и конца (End) При объявлении делегата компилятор генерирует класс с тремя методами: Beginlnvoke, Endlnvoke и Invoke (Вызвать). Beginlnvoke и Endlnvoke — методы с типо...
Асинхронный обратный вызов
Асинхронный обратный вызов Вместо ожидания на дескрипторе, можно передать функцию обратного вызова в Beginlnvoke (или BeginXXX) метод. Именно так и делается в примере AsynchWithCallback (Asynch с...
Организация поточной обработки с параметрами
Организация поточной обработки с параметрами Асинхронный обратный вызов выполняется в потоке, отличном от того, в котором был сделан вызов Beginlnvoke. Если требования к организации поточной обраб...
Удаленный доступ
Удаленный доступ Технология удаленного доступа использует все ключевые концепции прикладной модели .NET (.NET Application Model). Хотя подробное обсуждение удаленного доступа не является целью это...
Краткий обзор удаленного доступа
Краткий обзор удаленного доступа Ниже перечислены ключевые части удаленного доступа перехват, с помощью которого генерируются сообщения для связи по каналам; форматеры (Formatters), служащие дл...
Перехват
Перехват Заместители и заглушки (называемые в NET диспетчерами, организующими программами и планировщиками) преобразовывают обращение к функции на клиентской или серверной стороне в сообщения, к...
Каналы и форматеры
Каналы и форматеры Форматер преобразовывает сообщение в поток байтов. Каркас .NET Framework поставляется с двумя форматерами, двоичным и SOAP (использующим XML-документы и рассматриваемым в главе...
Удаленные объекты
Удаленные объекты Клиентская часть организовывает заместитель, активизируя (вызывая) удаленный объект. Удаленные объекты должны быть производными от MarshalByRefObject, потому что вы работаете с з...
Активация
Активация Объекты активизируются на стороне клиента одним из трех способов, используя класс Activator (Активатор, Модуль активизации). Activator: :GetObject используется для получения ссылки на а...
Пример удаленного объекта
Пример удаленного объекта Для нашего примера удаленного доступа мы изолируем наш объект Customers (Клиенты) от сборки Customer (Клиент). В папке примера Remoting находятся два решения. Одно предст...
Пример программы реализующей удаленный доступ
Пример программы, реализующей удаленный доступ В примере Remoting клиент обращается к активизированному сервером объекту. Сервер— это класс TcpServerChannel, использующий двоичный формат с проток...
Метаданные и удаленный доступ
Метаданные и удаленный доступ Для того чтобы запросить объект определенного типа, клиенту должны быть доступны метаданные о типе. В примере программы удаленного доступа, рассмотренной в этой главе...
Конфигурационные файлы удаленного доступа
Конфигурационные файлы удаленного доступа Конфигурационные файлы используются, чтобы определить, где будет активизирован объект. Клиент затем использует оператор new (создать) для создания объекта...
Динамическое связывание
Динамическое связывание Отражение может также использоваться для реализации динамического связывания. Динамическое связывание состоит в том, что метод, который нужно вызвать, определяется в процес...
Программируемые атрибуты
Программируемые атрибуты В главе 5 "Управляемый C++ в .NET Framework" мы ввели концепцию атрибутов, которые уже появлялись в нескольких примерах. В этой главе мы использовали атрибуты...
Использование самостоятельно созданного атрибута
Использование самостоятельно созданного атрибута Перед тем как обсудить реализацию собственного атрибута, рассмотрим, как используется атрибут InitialDirectory. Чтобы указать начальный каталог для...
Определение класса атрибута
Определение класса атрибута Чтобы создать пользовательский атрибут, необходимо определить класс атрибута, производный от базового класса Attribute (Атрибут). В соответствии с соглашением, нужно да...
Определение базового класса
Определение базового класса Последний шаг при работе с самостоятельно создаваемыми атрибутами состоит в том, чтобы предусмотреть способ извлечения пользовательской информации об атрибуте из метада...
Сборка мусора
Сборка мусора Распределенная управляемая память автоматически возвращается системе с помощью алгоритма сборки мусора. Общеязыковая среда времени выполнения CLR отслеживает использование памяти, ко...
Уничтожение объектов
Уничтожение объектов Исключая ситуацию явного использования оператора delete (уничтожить), для управляемого объекта время разрушения недетерминировано. Деструктор для конкретного объекта, на котор...
Неуправляемые ресурсы и освобождение
Неуправляемые ресурсы и освобождение ранее выделенной области памяти Предположим, что некоторый объект, с помощью которого был открыт файл, программе больше не нужен и помечен для сборки мусора....
Попытка удалить открытый файл
Рисунок 8.2. Попытка удалить открытый файл приводит к нарушению процедуры совместного использования, т.е. к нарушению условий коллективного доступа. В результате появляется сообщение об ошибке с...
Дополнительное имя для Dispose
Дополнительное имя для Dispose (Освободить ранее выделенную область памяти) Стандартное имя метода, производящего очистку— Dispose (Освободить ранее выделенную область памяти). Соглашение состоит...
Поколения
Поколения Чтобы оптимизировать технологию, каждому объекту, находящемуся в управляемой динамически распределяемой области памяти, назначается поколение. Так, новому объекту назначается поколение 0...
Завершение и раскручивание стека
Завершение и раскручивание стека Как было упомянуто ранее, одно из достоинств механизма обработки исключений заключается в том, что, поскольку при обработке исключения происходит раскрутка стека в...
Управление сборкой мусора с помощью
Управление сборкой мусора с помощью класса сборщика мусора GC Обычно лучше всего не вмешиваться в работу сборщика мусора, — пусть он выполняет свою работу незаметно для вас. Иногда, однако, прогр...
SuppressFinalize
SuppressFinalize Данный метод производит запрос к системе, чтобы та не выполняла операцию завершения, т.е. не вызвала деструктор указанного объекта. Как мы видели раньше, нужно вызвать этот мето...
Collect (Собрать)
Collect (Собрать) Можно принудительно выполнить сборку мусора, вызвав метод Collect (Собрать). Необязательный параметр позволяет указать, какие поколения должны принять участие в сборке мусора. Эт...
MaxCeneration
MaxCeneration Это свойство возвращает максимальное поддерживаемое общеязыковой средой времени выполнения CLR число поколений....
CetCeneration
CetCeneration Данный метод возвращает текущий номер поколения, которое назначено объекту....
CetTotalMemory
CetTotalMemory Указанный метод возвращает объем распределенной в настоящее время памяти в байтах (а не объем свободной доступной памяти и не общий объем динамически распределяемой области памяти)....
Ввод и вывод в NЕТ
Ввод и вывод в .NЕТ Грубо обобщая, можно разделить функции ввода/вывода в каркасе .NET Framework на две широких категории, не зависящих от устройства хранения данных (диск, память, и т.д.): это за...
Программапример
Программа-пример Программа GarbageCollection (Сборка мусора) иллюстрирует использование рассмотренных выше методов класса GC (СБОРЩИК МУСОРА). Пример несколько искусственен. С его помощью просто...
Резюме
Резюме Данная глава представила модель приложений .NET. С помощью метаданных и отражения, каркас может получить всю необходимую информацию о программе, чтобы предоставить множество служб, которые...
Потоковые классы
Потоковые классы Stream (Поток, Абстрактный последовательный файл) — абстрактный класс, который является базовым для чтения и записи байтов в некоторое хранилище данных типа файла. Этот класс подд...
Примитивные типы данных и потоки
Примитивные типы данных и потоки Классы, производные от Stream (Поток, Абстрактный последовательный файл), целесообразно использовать тогда, когда нужно читать или писать байты данных блоками. Есл...
TextReader И TextWriter
TextReader И TextWriter В абстрактных классах TextReader и TextWriter данные рассматриваются как последовательный поток символов (то есть, просто как текст). TextReader имеет следующие методы: C...
Обработка файлов
Обработка файлов Каркас содержит два класса File (Файл) и File Info, которые очень полезны для работы с файлами. Класс File (Файл) предоставляет основные функциональные возможности для обработки...
Класс File (Файл)
Класс File (Файл) Класс File (Файл) содержит методы для создания и открытия файлов, которые возвращают объекты FileStream, StreamWriter или StreamReader, производящие фактическое чтение и запись....
Класс Filelnfo
Класс Filelnfo Конструктор Filelnfo создает объект, который представляет дисковый файл. Конструктор принимает один параметр — строку, содержащую имя файла. Объект будет иметь свойства, отражающи...
Пример File (Файл)
Пример File (Файл) Пример File (Файл) в папке FilelO иллюстрирует использование классов Filelnfo и File (Файл). В этом примере используется статический метод Delete (Удалить) класса File (Файл) дл...








Начало