Классы каркаса .NET Framework
Невозможно описать в одной главе, или даже в одной книге, все классы каркаса .NET Framework. Хотя и не полностью, классы .NET охватывают большую часть интерфейса 32-разрядных Windows-приложений (Win32 API), так же как и много чего другого. Несмотря на то, что основное внимание было уделено функциональным возможностям, связанным с Internet, однако изменилась и модель разработки приложений в среде Windows.
В этой главе мы сосредоточим наше внимание на классах, которые иллюстрируют ключевые концепции и модели, проявляющиеся повсюду в каркасе .NET Framework. Такой подход представляется нам более плодотворным, чем просто попытаться немного рассказать о каждом классе, который когда-либо мог бы понадобиться, без того, чтобы дать читателю общее представление о классах .NET. В других главах глубже рассматриваются иные части каркаса, такие как Windows Forms (Формы Windows), ASP.NET, безопасность ADO.NET, и сетевые службы (Web Services).
Мы начинаем с рассмотрения концепций отражения и метаданных. Метаданные появляются всюду в .NET и важно понимать, как общеязыковая среда времени выполнения CLR (Common Language Runtime) предоставляет разные услуги (службы, сервисы) прикладным программам. Затем по нескольким причинам мы исследуем файловый ввод/вывод. Во-первых, при этом вводится важное понятие сериализации (преобразования в последовательную форму). Во-вторых, класс Path (Путь) позволяет проиллюстрировать, как отдельные классы каркаса реализуют некоторые или все свои функциональные возможности с помощью статических методов. В-третьих, рассматриваемые в применении к файловому вводу/выводу классы используются для форматирования во многих местах .NET.
Разобравшись в понятии сериализации, читатель получит конкретную идею относительно того, как каркас может управлять объектами прозрачным для нас способом. Ведь сериализация появляется во вспомогательной роли в любом месте, где объекты должны будут сохраняться или транспортироваться. Обсуждение интерфейса ISerializable снова демонстрирует, насколько проще реализовать интерфейс, используя .NET, чем с помощью модели компонентных объектов Microsoft (COM).
С целью более углубленного понимания моделей .NET для приложений, мы рассматриваем программирование с помощью потоков в .NET, а также несколько методов синхронизации и разрешения конфликтов, связанных с многопоточностью. Различные методы синхронизации иллюстрируют компромисс использования свойств, предоставленных каркасом, по сравнению со свойствами, реализованными самостоятельно.
Для лучшего понимания модели программирования .NET, мы введем понятие контекста, а также рассмотрим применение заместителей и заглушек для реализации системных сервисов. Мы также рассмотрим использование прикладных областей, благодаря которым достигается более эффективная изоляция приложений, чем с помощью процессов Win32.
Асинхронные шаблоны проектирования появляются в .NET повсюду и обсуждаются довольно подробно. В книге продемонстрированы некоторые примеры удаленного доступа, поскольку это ключевая технология, включающая в себя большинство концепций, рассматриваемых в данной главе. В примерах, разбираемых здесь, используется несколько атрибутов, предоставляемых каркасом .NET Framework, а также демонстрируется реализация и использование выборочных, самостоятельно созданных атрибутов. Мы обсуждаем операцию завершения, чтобы читатель понял, как можно удостовериться в том, что приложения правильно освобождают ресурсы.