Глава 1. Философия .NET
Начальное знакомство с платформой .NET
Некоторые основные преимущества платформы .NET
Введение в строительные блоки платформы .NET (CLR, CTS и CLS)
Роль библиотек базовых классов
Платформа Microsoft .NET (и связанный с ней язык программирования С#) впервые была представлена примерно в 2002 г. и быстро стала одной из основных современных сред разработки программного обеспечения. Как было отмечено во вводном разделе этой книги, при ее написании преследовались две цели. Первая из них — предоставление читателям глубокого и подробного описания синтаксиса и семантики языка С#. Вторая (столь же важная) цель — иллюстрация применения многочисленных API-интерфейсов .NET, включая доступ к базам данных с помощью ADO.NET и Entity Framework (EF), набор технологий LINQ, WPF, WCF, WF и разработку веб-сайтов с использованием ASP.NET. Как говорят, путешествие начинается с первого шага, который и будет сделан в главе 1.Задача настоящей главы заключается в построении концептуальной основы для успешного освоения всего остального материала книги. Здесь рассматриваются такие связанные с .NET темы, как сборки, общий промежуточный язык (Common Intermediate Language — CIL) и оперативная компиляция (Just-In-Time Compilation — JIT). В дополнение к предварительному обзору ключевых слов языка программирования С#, вы узнаете о взаимоотношениях между различными компонентами платформы .NET, такими как общеязыковая исполняющая среда (Common Language Runtime — CLR), общая система типов (Common Type System — CTS) и общеязыковая спецификация (Common Language Specification — CLS).Кроме того, в настоящей главе представлен обзор функциональности, поставляемой в библиотеках базовых классов .NET 4.5, для обозначения которых иногда используют аббревиатуру BCL (base class library
— библиотека базовых классов). Здесь вы кратко ознакомитесь с независимой от языка и платформы природой платформы .NET (это действительно так — область применения .NET не ограничивается операционной системой Windows) и узнаете о роли .NET при создании приложений, ориентированных на среду Windows 8. Как должно быть понятно, многие из этих тем будут более подробно освещаться в остальной части книги
Начальное знакомство с платформой .NET
До того, как компания Microsoft выпустила язык C# и платформу .NET, разработчики программного обеспечения, создававшие приложения для операционных систем семейства Windows, часто применяли модель программирования СОМ. Технология СОМ(Component Object Model — модель компонентных объектов) позволяла строить библиотеки, которые можно было использовать в различных языках программирования. Например, программист на C++ мог построить библиотеку СОМ, которой мог пользоваться разработчик на Visual Basic. Независимая от языка природа СОМ, безусловно, была удобна. Однако недостатком модели СОМ являлась усложненная инфраструктура, хрупкая модель развертывания и возможность работы только под управлением Windows. Несмотря на сложность и ограничения СОМ, с применением этой архитектуры было успешно создано буквально бесчисленное количество приложений. Тем не менее, в настоящее время большинство приложений, ориентированных на семейство операционных систем Windows, создаются без применения модели СОМ. Вместо этого приложения для настольных компьютеров, веб-сайты, службы операционной системы и библиотеки многократно используемой логики доступа к данным и бизнес-логики строятся с помощью платформы .NET.
Как уже было сказано, язык C# и платформа .NET впервые были представлены в 2002 г., и целью их создания было обеспечение более мощной, гибкой и простой модели программирования по сравнению с СОМ. Как можно будет увидеть в остальных материалах книги, .NET Framework — это программная платформа для построения приложений на базе семейства операционных систем Windows, а также многочисленных операционных систем производства не Microsoft, таких как Mac OS X и различные дистрибутивы Unix и Linux. Для начала ниже приведен краткий перечень некоторых ключевых средств, поддерживаемых .NET.
Возможность взаимодействия с существующим кодом. Эта возможность, несомненно, является очень полезной, поскольку позволяет комбинировать существующие двоичные компоненты СОМ (т.е. обеспечивать взаимодействие с ними) с более новыми программными компонентами .NET и наоборот. С выходом.NET 4.0 и последующих версий возможность взаимодействия дополнительно упростилась благодаря добавлению ключевого слова dynamic (которое рассматривается в главе 16).
Поддержка многочисленных языков программирования. Приложения .NET можно создавать с использованием любого числа языков программирования (С#. Visual Basic, F# и т.д.).
Общий исполняющий механизм, разделяемый всеми поддерживающими .NET языками. Одним из аспектов этого механизма является наличие хорошо определенного набора типов, которые способен понимать каждый поддерживающий .NET язык.
Языковая интеграция. В .NET поддерживается межъязыковое наследование,межъязыковая обработка исключений и межъязыковая отладка кода. Например,базовый класс может быть определен в С#, а затем расширен в Visual Basic.
Обширная библиотека базовых классов. Эта библиотека позволяет избегать сложностей, связанных с выполнением низкоуровневых обращений к API-интерфейсам,и предлагает согласованную объектную модель, используемую всеми поддерживающими .NET языками.
Упрощенная модель развертывания. В отличие от СОМ, библиотеки .NET не регистрируются в системном реестре. Более того, платформа .NET позволяет сосуществовать на одном и том же компьютере нескольким версиям одной и той же сборки *.dll.
Эти и многие другие темы будут подробно рассматриваться в последующих главах.
Введение в строительные блоки платформы .NET (CLR, CTS и CLS)
Теперь, когда вы узнали об основных преимуществах, обеспечиваемых платформой .NET, рассмотрим три ключевых (взаимосвязанных) компонента, которые делают это возможным — CLR, CTS и CLS. С точки зрения программиста .NET представляет собой исполняющую среду и обширную библиотеку базовых классов. Уровень исполняющей среды называется общеязыковой исполняющей средой (Common Language Runtime) или,сокращенно, средой CLR. Главной задачей CLR является автоматическое обнаружение,загрузка и управление объектами .NET (вместо программиста). Кроме того, среда CLR заботится о ряде низкоуровневых деталей, таких как управление памятью, размещение приложения, координирование потоков и выполнение проверок, связанных с безопасностью (в числе прочих низкоуровневых нюансов).
Другим строительным блоком платформы .NET является общая система типов(Common Туре System) или, сокращенно, система CTS. В спецификации CTS полностью описаны все возможные типы данных и все программные конструкции, поддерживаемые исполняющей средой. Кроме того, в CTS показано, как эти сущности могут взаимодействовать друг с другом, и указано, как они представлены в формате метаданных .NET (которые рассматриваются далее в этой главе, а более подробно — в главе 15).Важно понимать, что отдельно взятый язык, совместимый с .NET, может не поддерживать абсолютно все функциональные средства, определенные спецификацией CTS.Поэтому существует общеязыковая спецификация (Common Language Specification) или,сокращенно, спецификация CLS, в которой описано подмножество общих типов и программных конструкций, которое должны поддерживать все языки программирования для .NET. Таким образом, если создаваемые типы .NET предлагают только средства,совместимые с CLS, ими могут пользоваться все языки, поддерживающие .NET. И, наоборот, в случае применения типа данных или программной конструкции, выходящей за рамки CLS, нельзя гарантировать возможность взаимодействия с такой библиотекой кода .NET каждым языком программирования .NET. К счастью, как будет показано далее в этой главе, существует очень простой способ указать компилятору C# на необходимость проверки всего кода относительно совместимости с CLS.
В дополнение к среде CLR и спецификациям CTS/CLS, платформа .NET предоставляет библиотеку базовых классов, которая доступна всем языкам программирования .NET.Эта библиотека не только инкапсулирует разнообразные примитивы, такие как потоки,файловый ввод-вывод, системы визуализации графики и механизмы взаимодействия с различными внешними устройствами, но также обеспечивает поддержку для многочисленных служб, требуемых большинством реальных приложений.Библиотеки базовых классов определяют типы, которые можно использовать для построения программных приложений любого вида. Например, ASP.NET можно применять для построения веб-сайтов, WCF — для создания сетевых служб, WPF — для написания настольных приложений с графическим пользовательским интерфейсом и т.д. Кроме того, библиотеки базовых классов предоставляют типы для взаимодействия с XML-документами, локальным каталогом и файловой системой текущего компьютера,для коммуникаций с реляционными базами данных (через ADO.NET) и т.п. На высоком уровне отношения между CLR, CTS, CLS и библиотеками базовых классов выглядят так,как показано на рис. 1.1.