Тарифы Услуги Сим-карты

Что такое платформа net framework. Платформа Microsoft.NET. Обзор архитектуры и возможностей. Среда и эмоции

NET Framework служит средой для поддержки, разработки и выполнения распределенных приложений, которые базируются на компонентах (элементах управления).

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

NET Framework обеспечивает:

  • совместное использование разных языков программирования;
  • безопасность и переносимость программ;
  • общую модель программирования на базе платформы Windows.

2. Какие основные составляющие .NET Framework ?

С точки зрения программирования, .NET Framework состоит из двух основных составляющих:

  • общеязыковая исполнительная среда CLR (Common Language Runtime );
  • библиотека базовых классов.

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

Библиотека базовых классов включает в себя определение разнообразных примитивов, которыми могут быть: потоки, графические API-интерфейсы, реализация баз данных, файловый ввод-вывод и прочее.

3. Какой принцип действия общеязыковой среды выполнения CLR (Common Language Runtime )?

Общеязыковая среда выполнения CLR управляет выполнением кода .NET .

После компиляции программы на C# (или другом языке) создается файл, который содержит особого рода псевдокод или байт-код (а не исполнительный файл, как было раньше). Этот псевдокод называется (MSIL ) или Common Intermediate Language (CIL ). Этот псевдокод есть промежуточным языком Microsoft .

Основное назначение CLR – превратить промежуточный код MSIL в исполнительный код в процессе выполнения программы.

Любая программа, которая скомпилирована в псевдокод MSIL , может быть выполнена в любой среде, которая содержит реализацию CLR . Это обеспечивает переносность программ в среде .NET Framework .

Рис. 1. Процесс преобразования исходного кода в код на языке MSIL (CIL или IL ) и создание файла сборки (*.dll или *.exe )

После этого, псевдокод превращается в исполняемый код. Это осуществляет JIT -компилятор. JIT (Just-in-time ) -компиляция – это компиляция на «лету».

Исполнительная среда CLR отвечает за определение места размещения сборки (assembly).

Запрашиваемый тип, который размещается в сборке (например, класс ArrayList или другой тип), определяется в двоичном файле (*.dll или *.exe ) с помощью считывания метаданных этого файла.

После этого CLR размещает в памяти считанный из сборки тип.

Затем CLR превращает CIL-код в соответствующие инструкции, которые подстраиваются под конкретную платформу (в зависимости от ПК, операционной системы и т.п.). Кроме того, на этом этапе происходят необходимые проверки на предмет безопасности.

Последним происходит выполнение запрашиваемого программного кода.

4. Что такое промежуточный язык MSIL (Microsoft Intermediate Language ) или CIL (Common Intermediate Language )?

Сперва промежуточный язык псевдокода назывался Microsoft Intermediate Language (MSIL ). Позднее (в последних версиях .NET ) это название было изменено на Common Intermediate Language (CIL — общий промежуточный язык). Аббревиатуры MSIL , CIL и IL (Intermediate Language )означают одно и то же.

Промежуточный язык CIL (или MSIL ) формируется после компиляции программы на некотором языке программирования, который поддерживает платформу .NET Framework .

MSIL есть псевдокодом. MSIL определяет набор инструкций, которые:

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

Фактически, MSIL – это язык переносного ассемблера

5. Что такое сборка (assembly) с точки зрения технологии .NET ?

Сборки – это файлы с расширениями *.dll или *.exe , которые содержат независимые от платформы .NET инструкции на промежуточном языке (Intermediate Language – IL ), а также метаданные типов.

Сборка создается с помощью .NET компилятора. Сборка – это большой двоичный объект.

Сборка предназначена для сохранения пространств имен (namespaces ). Пространства имен содержат типы. Типами могут быть классы, делегаты, интерфейсы, перечисления, структуры.

Сборка может содержать любое количество пространств имен. Любое пространство имен может содержать любое количество типов (классов, интерфейсов, структур, перечислений, делегатов).

6. Что размещается в сборках?

В сборках размещается CIL -код (MSIL -код или IL -код) и метаданные.

CIL -код компилируется под конкретную платформу только тогда, если происходит обращение к нему из исполняющей среды .NET .

Метаданные детально описывают особенности каждого типа, который есть внутри данной двоичной .NET единицы.

Например , при создании приложения типа Windows Forms Application в C# создается файл Assembly.info . Этот файл размещается в подпапке Properties относительно основной папки программы. В этом файле указывается общая информация о сборке.

7. Что такое манифест (manifest )?

Манифест – это описание самой сборки с помощью метаданных.

В манифесте размещается информация:

  • о текущей версии сборки;
  • сведения о культуре (локализация строчных и графических ресурсов);
  • перечень ссылок на все внешние сборки, которые нужны для правильного функционирования.

8. Схема взаимодействия между исходным кодом, компилятором .NET и механизмом выполнения .NET .

Программист создает исходный код приложения на языке, который поддерживает технологию .NET (языке C# , C++/CLI , Visual Basic .NET и т.д.). Приложение создается в некоторой среде программирования, например Microsoft Visual Studio . Компилятор формирует сборку – файл, который содержит CIL -инструкции, метаданные и манифест.

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

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

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

После этого приложение выполняется.

Рисунок 2. Связь между исходным кодом, компилятором и механизмом выполнения .NET

9. Какие существуют виды сборок?

Существует два вида сборок:

  • однофайловые сборки;
  • многофайловые сборки.

Сборка, которая состоит из одного единого модуля (*.dll или *.exe ) называется однофайловой. В однофайловых сборках все необходимые CIL -инструкции, метаданные и манифесты размещаются в одном, четко определенном пакете.

Сборка, которая состоит из многих файлов двоичного кода .NET , называется многофайловой. Каждый из этих файлов называется модулем.

В многофайловой сборке один из модулей есть главным (primary ).

10. В каком файле размещается главная сборка библиотеки MS Visual Studio?

Главная сборка размещается в файле “mscorlib.dll ”.

11. Что такое общая система типов CTS ?

CTS (Common Type System ) – система типов, которая содержит полное описание всех возможных типов данных и программных конструкций, которые поддерживаются общеязыковой исполнительной средой CLR . Также здесь описывается то, как эти сущности могут взаимодействовать между собою.

Типами могут быть классы, интерфейсы, структуры, перечисления, делегаты.

12. Какое назначение общеязыковой спецификации CLS?

Как известно, не все языки программирования, которые являются совместимыми с .NET , могут поддерживать функциональные возможности системы типов CTS . Для этого используется общеязыковая спецификация CLS (Common Language Specification ).

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

13. Какие языки программирования поддерживают технологию .NET ?

В системе разработки приложений MS Visual Studio технологию .NET поддерживают следующие языки программирования: C# , Visual Basic .NET , C++/CLI , JScript .NET , F# , J# .

Для того, чтобы можно было использовать технологию .NET нужно установить на компьютере программное обеспечение Microsoft .NET Framework Software Development Kit (SDK ) или Microsoft Visual Studio любой версии.

14. Что такое пространство имен (namespace )?

Пространство имен предназначено для объединения группы типов, которые связаны между собою с семантической точки зрения. Типы размещаются в сборках (assembly ). Под типами понимаются классы, делегаты, интерфейсы, структуры, перечисления.

Примеры названий пространств имен:

System System.Data System.IO System.Collections System.Threading.Tasks

Например, в пространстве имен System.Data размещаются основные типы для работы с базами данных, в пространстве имен System.Collections размещаются основные типы для работы с коллекциями.

15. Как вывести содержимое сборок, пространств имен и типов в MS Visual Studio ?

В системе Microsoft Visual Studio есть утилита Object Browser , которая вызывается с меню View (рисунок 3).

Рис. 3. Вызов утилиты Object Browser

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

На рисунке 4 отображен список сборок, которые отображаются в технологии “.NET Framework 4 ”. Выделена сборка с именем “mscorlib ”.

Рис. 4. Окно Object Browser с выделенной сборкой mscorlib.dll

Если раскрыть содержимое сборки mscorlib (знак “+ ”), то будет отображен список всех пространств имен данной сборки (рисунок 5). Как видно из рисунка, сборка включает пространства имен Microsoft.Win32 , System , System.Collections , System.Collections.Concurrent и много других.

Рис. 5. Сборка mscorlib и список пространств имен, которые входят в нее

Аналогично раскрывается любое из пространств имен. В пространствах имен описываются типы. В типах описываются методы, свойства, константы и т.п.

На рисунке 6 изображен класс BinaryReader из пространства имен System.IO . По всей видимости, в классе реализованы методы с именами BinaryReader() , Close() , Dispose() , FillBuffer() и прочие.

Рис. 6. Содержимое класса BinaryReader

16. Как подключить пространство имен в программе на C# ?

Для подключения пространства имен используется ключевое слово using

Введение

ПЛАТФОРМА - это как минимум среда выполнения программ и… ещё что-либо, что определяет особенности разработки и выполнения программного кода – парадигмы программирования, языки программирования, множества базовых классов.

Microsoft.NET (.NET Framework) – программная платформа. Содержит следующие основные компоненты: the common language runtime (CLR) and the .NET Framework class library (.NET FCL).

CLS (Common Language Specification) – общая спецификация языков программирования. Это набор конструкций и ограничений, которые являются руководством для создателей библиотек и компиляторов в среде.NET Framework. Библиотеки, построенные в соответствии с CLS, могут быть использованы из любого языка программирования, поддерживающего CLS. Языки, соответствующие CLS (к их числу относятся языки Visual C#, Visual Basic, Visual C++), могут интегрироваться друг с другом. CLS – это основа межъязыкового взаимодействия в рамках платформы Microsoft.NET.

CLR (Common Language Runtime) – Среда Времени Выполнения или Виртуальная Машина. Обеспечивает выполнение сборки. Основной компонент.NET Framework. Под Виртуальной Машиной понимают абстракцию инкапсулированной (обособленной) управляемой операционной системы высокого уровня, которая обеспечивает выполнение программного кода и предполагает решение следующих задач:

§ управление кодом (загрузку и выполнение),

§ управление памятью при размещении объектов,

§ изоляцию памяти приложений,

§ проверку безопасности кода,

§ преобразование промежуточного языка в машинный код,

§ доступ к метаданным (расширенная информация о типах),

§ обработка исключений, включая межъязыковые исключения,

§ взаимодействие между управляемым и неуправляемым кодом (в том числе и COM-объектами),

§ поддержка сервисов для разработки (профилирование, отладка и т.д.).

Короче, CLR – это набор служб, необходимых для выполнения сборки. При этом программный код сборки может быть как управляемым (код, при выполнении которого CLR, в частности, активизирует систему управления памяти), так и неуправляемым (“старый” программный код).

Сама CLR состоит из двух главных компонентов: ядра (mscoree.dll) и библиотеки базовых классов (mscorlib.dll). Наличие этих файлов на диске – верный признак того, что на компьютере, по крайней мере, была предпринята попытка установки платформы.NET.

Ядро среды выполнения реализовано в виде библиотеки mscoree.dll. При компоновке сборки в неё встраивается специальная информация, которая при запуске приложения (EXE) или при загрузке библиотеки (обращение к DLL из неуправляемого модуля – вызов функции LoadLibrary для загрузки управляемой сборки) приводит к загрузке и инициализации CLR. После загрузки CLR в адресное пространство процесса, ядро среды выполнения выполняет следующие действия:

§ находит местонахождение сборки,

§ загружает сборку в память,

§ производит анализ содержимого сборки (выявляет классы, структуры, интерфейсы),

§ производит анализ метаданных,

§ обеспечивает компиляцию кода на промежуточном языке (IL) в платформозависимые инструкции (ассемблерный код),

§ выполняет проверки, связанные с обеспечением безопасности,

§ используя основной поток приложения, передаёт управление преобразованному в команды процессора фрагменту кода сборки.

FCL (.NET Framework Class Library) – соответствующая CLS спецификации объектно-ориентированная библиотека классов, интерфейсов и системы типов (типов-значений), которые включаются в состав платформы Microsoft .NET.

Эта библиотека обеспечивает доступ к функциональным возможностям системы и предназначена в качестве основы при разработке.NET приложений, компонент, элементов управления.

NET библиотека классов является вторым компонентом CLR.

NET FCL могут использовать ВСЕ.NET-приложения, независимо от назначения, архитектуры, используемого при разработке языка программирования. В частности, содержит:

§ встроенные (элементарные) типы, представленные в виде классов (на платформе.NET всё построено на структурах или классах),

§ классы для разработки графического пользовательского интерфейса (Windows Form),

§ классы для разработки Web-приложений и Web-служб на основе технологии ASP.NET (Web Forms),

§ классы для разработки XML и Internet-протоколами (FTP, HTTP, SMTP, SOAP),

§ классы для разработки приложений, работающих с базами данных (ADO.NET),

§ и многое другое.

NET-приложение – приложение, разработанное для выполнения на платформе Microsoft.NET. Реализуется на языках программирования, соответствующих CLS.

MSIL (Microsoft Intermediate Language, он же IL – Intermedia Language) – промежуточный язык платформы Microsoft.NET. Исходные тексты программ для.NET приложений пишутся на языках программирования, соответствующих спецификации CLS. Для языков программирования, соответствующих спецификации CLS может быть построен преобразователь в MSIL. Таким образом, программы на этих языках могут транслироваться в промежуточный код на MSIL. Благодаря соответствию CLS, в результате трансляции программного кода, написанного на разных языках, получается совместимый IL код.

Фактически MSIL является ассемблером виртуального процессора.

МЕТАДАННЫЕ - при преобразовании программного кода в MSIL также формируется блок МЕТАДАННЫХ, содержащий информацию о данных, используемых в программе. Фактически это наборы таблиц, содержащих информацию о типах данных, определяемых в модуле, о типах данных, на которые ссылается данный модуль. Ранее такая информация сохранялась отдельно. Например, приложение могло включать информацию об интерфейсах, которая описывалась на Interface Definition Language (IDL). Теперь метаданные являются частью управляемого модуля.

В частности, метаданные используются для:

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

§ верификации кода в процессе выполнения модуля,

§ управления динамической памятью (освобождение памяти) в процессе выполнения модуля,

§ при разработке программы стандартными инструментальными средствами (Microsoft Visual Studio.NET)

§ на основе метаданных обеспечивается динамическая подсказка (IntelliSense).

Языки, для которых реализован перевод на MSIL:

и ещё много других языков.

Исполняемый модуль - независимо от компилятора (и входного языка) результатом трансляции.NET приложения является управляемый исполняемый модуль (управляемый модуль). Это стандартный переносимый исполняемый (PE – Portable Executable) файл Windows.

Элементы управляемого модуля представлены в таблице.

Управляемый модуль содержит управляемый код.

Управляемый код - это код, который выполняется в среде CLR. Код строится на основе объявляемых в исходном модуле структур и классов, содержащих объявления методов. Управляемому коду должен соответствовать определенный уровень информации (метаданных) для среды выполнения. Код C#, Visual Basic, и JScript является управляемым по умолчанию. Код Visual C++ не является управляемым по умолчанию, но компилятор может создавать управляемый код, для этого нужно указать аргумент в командной строке(/CLR). Одной из особенностей управляемого кода является наличие механизмов, которые позволяют работать с УПРАВЛЯЕМЫМИ ДАННЫМИ.

Управляемые данные - объекты, которые в ходе выполнения кода модуля размещаются в управляемой памяти (в управляемой куче) и уничтожаются сборщиком мусора CLR. Данные C#, Visual Basic и JScript .NET являются управляемыми по умолчанию. Данные C# также могут быть помечены как неуправляемые.

Сборка (Assembly) - базовый строительный блок приложения в.NET Framework. Управляемые модули объединяются в сборки. Сборка является логической группировкой одного или нескольких управляемых модулей или файлов ресурсов. Управляемые модули в составе сборок исполняются в Среде Времени Выполнения (CLR). Сборка может быть либо исполняемым приложением (при этом она размещается в файле с расширением.EXE), либо библиотечным модулем (в файле с расширением.DLL). При этом ничего общего с обычными (старого образца!) исполняемыми приложениями и библиотечными модулями сборка не имеет.

Декларация сборки (Manifest) - составная часть сборки. Ещё один набор таблиц метаданных, который:

§ идентифицирует сборку в виде текстового имени, её версию, культуру и цифровую сигнатуру (если сборка разделяется среди приложений),

§ определяет входящие в состав файлы (по имени и хэшу),

§ указывает типы и ресурсы, существующие в сборке, включая описание тех, которые экспортируются из сборки,

§ перечисляет зависимости от других сборок,

§ указывает набор прав, необходимых сборке для корректной работы.

Эта информация используется в период выполнения для поддержки корректной работы приложения.

Процессор НЕ МОЖЕТ выполнять IL код. И перевод IL кода осуществляется JIT-компилятором (just in time – в нужный момент), который активизируется CLR по мере необходимости и выполняется процессором. При этом результаты деятельности JIT-компилятора сохраняются в оперативной памяти. Между фрагментом оттранслированного IL кода и соответствующим блоком памяти устанавливается соответствие, которое в дальнейшем позволяет CLR передавать управление командам процессора, записанным в этом блоке памяти, минуя повторное обращение к JIT-компилятору.

В среде CLR допускается совместная работа и взаимодействие компонентов программного обеспечения, реализованных на различных языках программирования.

На основе ранее сформированного блока метаданных CLR обеспечивает ЭФФЕКТИВНОЕ взаимодействие выполняемых.NET приложений.

Для CLR все сборки одинаковы, независимо от того на каких языках программирования они были написаны. Главное – это чтобы они соответствовали CLS. Фактически CLR разрушает границы языков программирования (cross-language interoperability). Таким образом, благодаря CLS и CTS .NET-приложения фактически оказываются приложениями на MSIL (IL).

CLR берёт на себя решение многих проблем, которые традиционно находились в зоне особого внимания разработчиков приложений. К числу функций, выполняемых CLR, относятся:

§ проверка и динамическая (JIT) компиляция MSIL кода в команды процессора,

§ управление памятью, процессами и потоками,

§ организация взаимодействия процессов,

§ решение проблем безопасности (в рамках существующей в системе политики безопасности).

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

Код, выполняемый в CLR (CLR процесс) отделён от других процессов, выполняемых на компьютере в это же самое время.

Обычный процесс запускается системой в рамках специально выделяемого процессу адресного пространства. CLR предоставляет возможность выполнения множества управляемых приложений в ОДНОМ ПРОЦЕССЕ. Каждое управляемое приложение связывается с собственным доменом приложения (сокращенно AppDomain). В приложении помимо основного домена может быть создано несколько дополнительных доменов.

Структура среды выполнения CLR представлена на картинке.

Свойства доменов:

§ домены изолированы друг от друга. Объекты, созданные в рамках одного домена недоступны из другого домена,

§ CLR способна выгружать домены вместе со всеми сборками, связанными с этими доменами,

§ возможна дополнительная конфигурация и защита доменов,

§ для обмена данными между доменами реализован специальный механизм безопасного доступа (маршалинг).

§ В.NET Framework разработана собственная компонентная модель, элементами которой являются.NET-сборки (.NET-assembly), а для прямой и обратной совместимости с моделью COM/COM+ в CLR встроены механизмы (COM Interop), обеспечивающие доступ к COM-объектам по правилам.NET и к.NET-сборкам по правилам COM. При этом для.NET-приложений не требуется регистрации компонентов в системном реестре Windows.

Для выполнения.NET-приложения достаточно разместить относящиеся к данному приложению сборки в одном каталоге. Если при этом сборка может быть использована в нескольких приложениях, то она размещается и регистрируется с помощью специальной утилиты в GAC (Global Assembly Cache Общем КЭШе сборок).

CTS - Common Type System Стандартная Система Типов. Поддерживается всеми языками платформы. В силу того, что.NET дитя ООП – то речь здесь идёт об элементарных типах, классах, структурах, интерфейсах, делегатах и перечислениях.

Common Type System является важной частью среды выполнения, определяет структуру синтаксических конструкций, способы объявления, использования, и применения ОБЩИХ типов среды выполнения. В CTS сосредоточена основная информация о системе ОБЩИХ ПРЕДОПРЕДЕЛЁННЫХ типов, об их использовании и управлении (правилах преобразования значений). CTS играет важную роль в деле интеграции разноязыких управляемых приложений.

Пространство имён – это способ организации системы типов в единую группу. Существует общая общеязыковая библиотека базовых классов. И концепция пространства имён обеспечивает эффективную организацию и навигацию в этой библиотеке. Вне зависимости от языка программирования доступ к определённым классам обеспечивается за счёт их группировки в рамках общих пространств имён.

Пространство имён Назначение
System
System.Data Для обращения к базам данных
System.Data.Common
System.Data.OleDb
System.Data.SqlClient
System.Collections Классы для работы с контейнерными объектами
System.Diagnostics Классы для трассировки и отладки кода
System.Drawing Классы графической поддержки
System.Drawing.Drawing2D
System.Drawing.Printing
System.IO Поддержка ввода-вывода
System.Net Поддержка передачи данных по сетям
System.Reflection Работа с пользовательскими типами во время выполнения приложения
System.Reflection.Emit
System.Runtime.InteropServices Поддержка взаимодействия с “обычным кодом” – DLL, COM-серверы, удалённый доступ
System.Runtime.Remoting
System.Security Криптография, разрешения
System.Threading Работа с потоками
System.WEB Работа с web-приложениями
System.Windows.Form Работа с элементами интерфейса Windows
System.XML Поддержка данных в формате XML

Выполнение неуправляемых исполняемых модулей (обычные Windows приложения), обеспечивается непосредственно системой Windows. Неуправляемые модули выполняются в среде Windows как “простые” процессы. Единственное требование, которому должны отвечать подобные модули – корректная работа в среде Windows. Они должны “правильно” работать (не вешать систему, не допускать утечек памяти, не блокировать другие процессы и корректно использовать средства самой ОС для работы от имени процессов). То есть, соответствовать наиболее общим правилам работы под Windows.

При этом большинство проблем корректного выполнения неуправляемого модуля (проблемы взаимодействия, выделения и освобождения памяти) являются проблемами разработчиков приложений. Например, известная технология COM является способом организации взаимодействия разнородных компонентов в рамках приложения.

Объект – в широком смысле это область памяти (стеке или куче), выделяемая в процессе выполнения программы для записи каких-либо значений. Характеризуется типом (фиксированным набором свойств, определяющих размер занимаемой области, способ интерпретации значения, диапазон значений, множество действий, допустимых при манипуляциях с объектом) местом расположения в памяти (адресом).

Сборка мусора - механизм, позволяющий CLR определить, когда объект становится недоступен в управляемой памяти программы. При сборке мусора управляемая память освобождается. Для разработчика приложения наличие механизма сборки мусора означает, что он больше не должен заботиться об освобождении памяти. Однако это может потребовать изменения в стиле программирования, например, особое внимание следует уделять процедуре освобождения системных ресурсов. Необходимо реализовать методы, освобождающие системные ресурсы, находящиеся под управлением приложения.

Стек - специальным образом организованная область памяти, предназначенный для временного хранения значений объектов (переменных и констант), для передачи параметров при вызове методов, для сохранения адреса возврата. Управление стеком по сравнению с кучей достаточно просто. Оно основано на изменении значения соответствующего регистра вершины стека. При сокращении размера стека объекты просто теряются.

Программа на C#

Программа – правильно построенная (не вызывающая возражений со стороны C# компилятора) последовательность предложений, на основе которой формируется сборка.

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

§ Portable Executable File (PE-файл с расширением.exe), пригоден к непосредственному исполнению CLR,

§ Dynamic Link Library File (DLL-файл с расширением.dll), предназначен для повторного использования как компонент в составе какого-либо приложения.

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

Аннотация: Инициатива Microsoft .NET. Проблемы совместимости, надежности и повторного использования компонентов. .NET Framework. Общеязыковая исполняющая среда CLR. Псевдомашинный язык CIL (управляемый assembler). JIT-компилятор. Языки программирования. Сборки. Метаданные. Сборщик мусора. Библиотека классов.NET Framework

Проблемы разработки современных информационных систем

Проблемы интеграции

  • Модулей, написанных на различных языках, использующих разный API (или версии API) или разный формат представления данных;
  • Программ, разработанных для различных платформ, в рамках единого программного комплекса;
  • Систем, использующих разные программные модели.

Особенно часто возникают проблемы интеграции с унаследованным кодом ( legacy ). При решении задач интеграции возникают проблемы несовместимости.

Проблемы переносимости

Все чаще к программам предъявляются требования поддержки нескольких платформ (например, возможность работы с программой на платформе Windows и Mac OS).

Проблемы версий

Windows-разработчики знают о проблеме совместимости версий, известной под названием "ад DLL". Этот "ад" возникает, когда компоненты, устанавливаемые для нового приложения, заменяют компоненты старого приложения. В итоге старое приложение начинает работать неправильно или перестает работать.

Управление ресурсами

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

Безопасность типов

Когда упоминают проблему безопасности типов, имеют в виду некорректное обращение с типами данных: попытки обратиться к областям памяти за границей типа, попытки вызвать методы, отсутствующие у типа, или попытки вызвать метод, принимающий в качестве параметра тип А, и передать ему в качестве параметра объект типа В.

Обработка сбоев

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

Эти и другие проблемы разработки информационных систем помогает решать платформа Microsoft .NET.

Решение проблем разработки информационных систем в.NET

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

Технология. NET представляет собой способ разработки и развертывания программного обеспечения, который с помощью таких широко используемых стандартов, как HTTP и XML , реализует взаимодействие программ и обеспечивает доступ через Internet к многочисленным программным сервисам. Технология включает. NET Framework - платформу для разработки и исполнения приложений, которая упрощает и ускоряет разработку, поддерживает полноценное объектно-ориентированное программирование для Web , устраняет многие типы наиболее распространенных программных ошибок, предоставляет общий API для всех языков.

Что составляет Microsoft .NET

NET Framework - инфраструктура разработки приложений. Ее основные компоненты - общеязыковая исполняющая среда (Common Language Runtime) и библиотека классов. NET Framework Class Library .

Общеязыковая исполняющая среда (Common Language Runtime)

Common Language Runtime (CLR) - общеязыковая исполняющая среда, абстрагирующая сервисы операционной системы и исполняющая управляемые приложения, любое действие которых должно получить разрешение со стороны CLR.

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

CLR расположена поверх операционной системы и предоставляет виртуальную среду для управляемых приложений. Код для платформы.NET либо исполняется CLR, либо получает разрешение на исполнение за ее пределами.

Код для CLR представляет собой команды псевдомашинного языка Common Intermediate Language (CIL). Эти команды компилируются в машинный код соответствующего типа процессора по запросу (just-in-time) в период выполнения. Обычно компиляция метода происходит один раз во время его первого вызова. Затем результат кэшируется в памяти, чтобы избежать задержек при повторных вызовах. JIT-компилятор выполняет оптимизацию кода специально для процессора, на котором исполняется этот код.

Преобразуя команды CIL в команды процессора, JIT-компилятор выполняет верификацию кода на предмет безопасности типов.

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

Ресурсы, выделяемые управляемым кодом, освобождаются сборщиком мусора. Иначе говоря, программист только выделяет память, но не освобождает ее - это делает CLR. Сборщик мусора отслеживает все ссылки на объекты, создаваемые программой, и уничтожает эти объекты, когда занимаемая ими память требуется где-то еще. Таким образом в приложениях с управляемым кодом разрешается проблема утечек памяти.

Верификация кода также является основой способности CLR выполнять несколько приложений внутри одного процесса. Процесс разделяется на виртуальные отсеки - домены приложений ( application domain ). Таким образом повышается эффективность использования памяти, выделяемой процессам. Домены приложений не менее безопасны, чем процессы, так как их границы не могут быть нарушены управляемыми приложениями.

.NET Framework Class library (FCL)

В. NET включены сборки библиотеки классов. NET Framework Class library ( FCL ), содержащие определения нескольких тысяч типов, каждый из которых предоставляет некоторую функциональность. Наборы "родственных" типов собраны в отдельные пространства имен. Так, пространство имен System содержит базовый класс Object , из которого в конечном счете порождаются все остальные типы.

Таким образом, всякая сущность в. NET является объектом со своими полями и методами.

Кроме того, System содержит типы для целых чисел, символов, строк, обработки исключений, консольного ввода/вывода, группу типов для безопасного преобразования одних типов в другие, форматирования данных, генерации случайных чисел и выполнения математических операций. Типами из пространства имен System пользуются все приложения.

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

Приведем некоторые наиболее распространенные пространства имен и краткое описание содержащихся там типов.

Основные пространства имен FCL
Пространство имен Содержание
System Фундаментальные типы данных и вспомогательные классы
System.Collections Хэш-таблицы, массивы переменной размерности и другие контейнеры
System.Data Классы ADO .NET для доступа к данным
System.Drawing Классы для вывода графики (GDI+)
System.IO Классы файлового и потокового ввода/вывода
System.Net Классы для работы с сетевыми протоколами, например с HTTP
System.Reflection Классы для чтения и записи метаданных
System.Runtime.Remoting Классы для распределенных приложений
System.ServiceProcess Классы для создания служб Wndows
System.Threading Классы для создания и управления потоками
System.Web Классы для поддержки HTTP
System.Web.Services Классы для разработки web-сервисов
System.Web.Services. Классы для разработки клиентов web-сервисов Protocols
System.Web.UI Основные классы, используемые ASP .NET
System.Web.UI. WebControls Серверные элементы управления ASP .NET
System.Wndows.Forms Классы для приложений с графическим интерфейсом пользователя
System.Xml Классы для чтения и ввода данных в формате XML

Все управляемые приложения используют

Совокупность средств, с помощью которых программы пишутся, корректируются, преобразуются в машинные коды, отлаживаются и запускаются, называют средой разработки или оболочкой . Платформа.Net или .Net Framework – это больше чем просто среда разработки программ, это новое революционное объединение ранее разрозненных технологий компанией Microsoft, которые позволяют разрабатывать разнотипные приложения на различных языках программирования под различные операционные системы.

NET Framework является надстройкой над операционной системой, в качестве которой может выступать любая версия Windows , Unix и вообще любая ОС ( по заверению разработчиков), и состоит из ряда компонентов. Так, . NET Framework включает в себя:

  1. Четыре официальных языка: С#, VB.NET, Managed C++ и JScript .NET.
  2. Общеязыковую объектно-ориентированную среду выполнения CLR (Common Language Runtime), совместно используемую этими языками для создания приложений.
  3. Ряд связанных между собой библиотек классов под общим именем FCL (Framework Class Library ).

Основным компонентом платформы. NET Framework является общеязыковая среда выполнения программ CLR . Название среды – "общеязыковая среда выполнения" - говорит само за себя: это исполняющая среда, которая подходит для различных языков программирования. К функциям CLR относятся:

  1. двухшаговая компиляция: преобразование программы, написанной на одном из языков программирования в управляемый код на промежуточном языке ( Microsoft Intermediate Language , MSIL , или просто IL), а затем преобразование IL-кода в машинный код конкретного процессора, который выполняется с помощью виртуальной машины или JIT-компилятора (Just In Time compiler - компилирование точно к нужному моменту);
  2. управление кодом: загрузка и выполнение уже готового IL-кода с помощью JIT-компилятора;
  3. осуществление доступа к метаданным с целью проверки безопасности кода ;
  4. управление памятью при размещении объектов с помощью сборщика мусора ( Garbage Collector );
  5. обработка исключений и исключительных ситуаций, включая межъязыковые исключения;
  6. осуществление взаимодействия между управляемым кодом (код, созданный для СLR) и неуправляемым кодом;
  7. поддержка сервисов для разработки разнотипных приложений.

Следующим компонентом. Net Framework является FCL – библиотека классов платформы. Эта библиотека разбита на несколько модулей таким образом, что имеется возможность использовать ту или иную ее часть в зависимости от требуемых результатов. Так, например, в одном из модулей содержатся "кирпичики", из которых можно построить Windows -приложения, в другом - "кирпичики", необходимые для организации работы в сети и т.д.

Часть FCL посвящена описанию базисных типов . Тип - это способ представления данных; определение наиболее фундаментальных из них облегчает совместное использование языков программирования с помощью. NET Framework. Все вместе это называется Common Type System ( CTS - единая система типов ).

Кроме того, библиотека FCL включает в себя Common Language Specification ( CLS – общая языковая спецификация), которая устанавливает: основные правила языковой интеграции. Спецификация CLS определяет минимальные требования, предъявляемые к языку платформы. NET . Компиляторы, удовлетворяющие этой спецификации, создают объекты, способные взаимодействовать друг с другом. Поэтому любой язык, соответствующий требованиям CLS , может использовать все возможности библиотеки FCL .

Как уже отмечалось, основными языками, предназначенными для платформы. NET Framework, являются С#, VB. NET , Managed C++ и JScript . NET . Для данных языков Microsoft предлагает собственные компиляторы, переводящие программу в IL-код, который выполняется JIT-компилятором среды CLR . Кроме Microsoft, еще несколько компаний и академических организаций создали свои собственные компиляторы, генерирующие код, работающий в CLR . На сегодняшний момент известны компиляторы для Pascal , Cobol, Lisp , Perl, Prolog и т.д. Это означает, что можно написать программу, например, на языке Pascal , а затем, воспользовавшись соответствующим компилятором, создать управляемый код , который будет работать в среде CLR .

Понятия приложения, проекта, решения

NET Framework не налагает никаких ограничений на возможные типы создаваемых приложений. Тем не менее, давайте рассмотрим некоторые наиболее часто встречающиеся типы приложений:

  1. Консольные приложения позволяют выполнять вывод на "консоль", то есть в окно командного процессора.
  2. Windows-приложения, использующие элементы интерфейса Windows, включая формы, кнопки, флажки и т.д.
  3. Web-приложения представляют собой web-страницы, которые могут просматриваться любым web-браузером.
  4. Web-сервисы представляют собой распределенные приложения, которые позволяют обмениваться по Интернету практически любыми данными с использованием единого синтаксиса независимо от того, какой язык программирования применялся при создании web-службы и на какой системе она размещена.

Приложение, находящееся в процессе разработки, называется проектом. Несколько приложений могут быть объединены в решение (solution).

Удобной средой разработки приложений является Visual Studio .Net.

Среда разработки Visual Studio .Net

В данном курсе мы будем изучать язык С#. Знакомство с языком начнем с разработки консольных приложений. В качестве среды разработки мы будем использовать Visual Studio . Net (VS).

Можно создавать файлы с исходным кодом на С# с помощью обычного текстового редактора, например, Блокнота, и компилировать их в управляемые модули с помощью компилятора командной строки, который является составной частью. NET Framework. Однако наиболее удобно для этих целей использовать VS, потому что:

  1. VS автоматически выполняет все шаги, необходимые для компиляции исходного кода.
  2. Текстовый редактор VS настроен для работы с теми языками, которые поддерживаются VS, например С#, поэтому он может интеллектуально обнаруживать ошибки и подсказывать в процессе ввода, какой именно код необходим.
  3. В состав VS входят программы, позволяющие создавать Windows- и Web-приложения путем простого перетаскивания мышью элементов пользовательского интерфейса.
  4. Многие типы проектов, создание которых возможно на С#, могут разрабатываться на основе "каркасного" кода, заранее включаемого в программу. Вместо того чтобы каждый раз начинать с нуля, VS позволяет использовать уже имеющиеся файлы с исходным кодом, что уменьшает временные затраты на создание проекта.

Создание первого проекта

Для создания проекта следует запустить VS, а затем в главном меню VS выбрать команду File – New - Project. После чего откроется диалоговое меню New Project (см. рис.1.1).


Рис. 1.1.

В поле Project types следует выбрать Visual C# , в поле Templates Console Application .

В строчке Name введите имя приложения Hello . Обратите внимание на то, что это же имя появится в строчке Solution Name . Уберите галочку в поле Create directory for Application (пока мы создаем простое приложение, и нам нет необходимости усложнять его структуру).

В строке Location определите положение на диске, куда нужно сохранять ваш проект. И нажмите кнопку OK . Примерный вид экрана изображен на рис 1.2


Рис. 1.2.

В правой верхней части располагается окно управления проектом Solution Explorer View - Solution Explorer . В этом окне перечислены все ресурсы, входящие в проект:

  1. AssemblyInfo.cs – информация о сборке .

    Компилятор в качестве результата своего выполнения создает так называемую сборку – файл с расширением exe или dll, который содержит IL-код и метаданные.

  2. System , System.Data , System.Xml – ссылки на стандартные библиотеки.
  3. Program.cs - текст программы на языке C#.

Замечание . В других версиях VS сюда же включается файл с расширением ico, отвечающий за вид ярлыка приложения.

В правой нижней части экрана располагается окно свойств Properties . Если оно закрыто, то его можно включить командой View - Properties . В этом окне отображаются важнейшие характеристики выделенного элемента.

Основное пространство экрана занимает окно редактора, в котором располагается текст программы, созданный средой автоматически. Текст представляет собой каркас, в который программист будет добавлять нужный код. При этом зарезервированные слова отображаются синим цветом, комментарии – зеленым, основной текст – черным.

Текст структурирован. Щелкнув на знак минус, мы скроем блок кода, щелкнув на знаке плюс – откроем.

Откроем папку, содержащую проект, и рассмотрим ее структуру (см. рис.1.3). Файлы, выделенные жирным шрифтом, появятся только после компиляции.


Рис. 1.3.

На данном этапе особый интерес для нас будут представлять следующие файлы:

  1. Hello.sln – основной файл, отвечающий за весь проект. Если необходимо открыть проект для редактирования, то нужно выбрать именно этот файл. Остальные файлы откроются автоматически.
  2. Program.cs – файл, в котором содержится исходный код - код, написанный на языке С#. Именно с этим файлом мы и будем непосредственно работать.
  3. Hello.exe – файл, в котором содержатся сгенерированный IL-код и метаданные проекта. Другими словами, этот файл и есть готовое приложение, которое может выполняться на любом компьютере, на котором установлена платформа.Net.

Теперь рассмотрим сам текст программы.

using System – это директива, которая разрешает использовать имена стандартных классов из пространства имен System непосредственно без указания имени пространства, в котором они были определены.

Ключевое слово namespace создает для проекта свое собственное пространство имен, которое по умолчанию называется именем проекта. В нашем случае пространство имен называется Hello. Однако программист вправе указать другое имя. Пространство имен ограничивает область применения имен, делая его осмысленным только в рамках данного пространства. Это сделано для того, чтобы можно было давать имена программным объектам, не заботясь о том, что они совпадут с именами в других приложениях. Таким образом, пространства имен позволяют избегать конфликта имен программных объектов, что особенно важно при взаимодействии приложений.

С# - объектно-ориентированный язык, поэтому написанная на нем программа будет представлять собой совокупность взаимодействующих между собой классов. Автоматически был создан класс с именем Program (в других версиях среды может создаваться класс с именем Class1 ).

Данный класс содержит только один метод - метод Main() . Метод Main() является точкой входа в программу, т.е. именно с данного метода начнется выполнение приложения. Каждая программа на языке С# должна иметь метод Main () .

Замечание .Технически возможно иметь несколько методов Main() в одной программе, в этом случае потребуется с помощью параметра командной строки сообщить компилятору С#, какой именно метод Main() является точкой входа в программу.

Debug-Start Debugging .Если программа выполнена без ошибок, то сообщение выведется в консольное окно, которое мелькнет и быстро закроется. Чтобы просмотреть сообщение в нормальном режиме нужно нажать клавиши Ctrl+F5 или выполнить команду Debug-Start Without Debugging .В нашем случае откроется следующее консольное окно:

Если код программы будет содержать ошибки, например, пропущена точка с запятой после команды вывода, то после нажатия клавиши F5 откроется диалоговое окно, в котором выведется сообщение о том, что обнаружена ошибка, и вопрос, продолжать ли работу дальше. Если вы ответите Yes , то будет выполнена предыдущая удачно скомпилированная версия программы. Иначе процесс будет остановлен и управление передано окну списка ошибок Error List .

Задание . Измените текст кода так, чтобы на экран выводилось сообщение: Ура!!!Сегодня информатика!! !

Всем доброго времени суток. На связи Алексей Гулынин. В данной первой статье по C# я бы хотел рассказать о платформе .NET Framework . Язык C# и сама платформа впервые появились в 2002 году. Основной целью их создания было обеспечить более простую, масштабируемую и, главное, более мощную модель программирования, по сравнению с моделью программирования COM. На базе платформы.NET Framework можно строить приложения для семейства операционных систем Windows, также можно строить приложения для Unix, Linux, Mac OS X. Ниже представлен краткий список возможностей, поддерживаемых.NET Framework :

1) Возможность взаимодействия с существующим кодом . Данная возможность позволяет компилировать, к примеру, двоичные компоненты COM и компоненты.NET.
2) Поддержка различных языков программирования . Приложения.NET можно создавать с помощью разных языков программирования, к примеру C#, Visual Basic, F#.
3) Общий исполняющий механизм . Смысл здесь в том, что в.NET существует определенный набор типов, который способен понимать каждый поддерживающий.NET, язык.
4) Языковая интеграция . Можно написать класс на Visual Basic, а затем расширить его на C#.
5) Большая библиотека базовых классов . Благодаря данной библиотеке, мы можем забыть о сложностях реализации низкоуровневых обращений к API-интерфейсам и сосредоточиться просто на программировании.
6) Простая модель развертывания . В отличии от библиотеки COM, .NET не нужно регистрироваться в реестре. Она может существовать в виде сборки.dll.

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

1) CLR (Common Language Runtime) — общеязыковая исполняющая среда. Первостепенной задачей данной среды является загрузка и управления объектами.NET (чтобы программист не делал этого вручную). Кроме этого, CLR заботится о ряде низкоуровневых деталей, например, управление памятью, размещение приложения, выполнение проверок, связанных с безопасностью приложения.
2) CTS (Common Type System) — общая система типов. Здесь описаны все возможные типы данных, поддерживаемые исполняемой средой (CLR). Нужно знать, что отдельно взятый язык, может не поддерживать абсолютно все средства, определенные спецификацией CTS. Поэтому существует:
3) CLS (Common Language Specification) . Здесь описано подмножество общих типов и программных конструкций, которые обязательно должны поддерживать всеми языками программирования для платформы.NET Framework.

В дополнение к среде CLR и спецификациям CTS/CLS, платформа.NET предоставляет библиотеку базовых классов , которая доступна всем языкам программирования.NET. Данная библиотека позволяет на высоком уровне (не задумываясь о деталях реализации) управлять, к примеру, файловым вводом-выводом, графикой, различными внешними устройствами, потоками данных, также различными службами.

Писать теорию я не мастер, поэтому скажу, для тех, кто хочет глубже понять философию.NET, я рекомендую прочитать первую главу книги Эндрю Троелсена «Язык программирования C# 5.0 и платформа.NET 4.5, год издания 2013″. Данная краткая информация о платформе.NET взята из этой книги. Проблема, с которой я столкнулся при изучении этой книги, — это сложность изложения материала для новичка. Возможно, вам так не покажется, это только моё мнение.

Ну что, друзья мои, у вас ещё не отпала охота изучать C#? Тогда давайте смело идти дальше, обещаю, что в будущем теоретических статей будет по минимуму (если только в начале изучения C# ), только одна практика. Если нужна теория — "курите" книгу Эндрю Троелсена.
А так, если нужна какая-нибудь информация по классу или его методу, идите сразу на