Базові поняття технології .NET Framework

Базові поняття технології .NET Framework


Зміст


1. Для чого призначене середовище програмування .NET Framework?

.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# (або іншій мові) створюється файл, що містить особливого роду псевдокод (а не виконавчий файл, як було раніше). Цей псевдокод називається Microsoft Intermediate Language (MSIL) або Common Intermediate Language (CIL). Цей псевдокод є проміжною мовою Microsoft.

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

Будь-яка програма, що зкомпільована в псевдокод MSIL, може бути виконана в будь-якому середовищі, що містить реалізацію CLR. Це забезпечує переносність програм в середовищі .NET Framework.

Технологія .NET. Процес перетворення вихідного коду в код на мові MSIL (CIL) та утворення файлу збірки

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

Після цього псевдокод перетворюється у виконавчий код. Це здійснює JIT -компілятор. JIT (Just-in-time) -компіляція – це компіляція на льоту.
Виконавче середовище CLR відповідає за визначення місця розміщення збірки (assembly).
Запитуваний тип, що розміщується в збірці, визначається у двійковому файлі (*.dll або *.exe) з допомогою зчитування метаданих цього файлу.
Після цього CLR розміщує в пам’яті зчитаний зі збірки тип.
Потім CLR перетворює CIL-код у відповідні інструкції, що підлаштовуються під конкретну платформу (в залежності від ПК, операційної системи тощо). Крім того, на цьому етапі відбуваються необхідні перевірки на предмет безпеки.
Останнім відбувається виконання запитуваного програмного коду.


4. Що таке проміжна мова MSIL (Microsoft Intermediate Language) або CIL (Common Intermediat Language)?

Спочатку проміжна мова псевдокоду називалась Microsoft Intermediate Language (MSIL). Пізніше (в останніх версіях .NET) ця назва була змінена на Common Intermediate Language (CIL – загальна проміжна мова). Абревіатури MSIL, CIL та IL означають одне й теж саме.

Проміжна мова 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-компілятор здійснює компіляцію збірки з врахуванням (прив’язкою) апаратної та програмної платформи комп’ютера, на якому відбувається запуск додатку.

Після цього додаток виконується.

Технологія .NET. Зв’язок між вихідним кодом, компілятором та механізмом виконання .NET

Рис. 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. Як переглянути вміст збірок (assemblies), просторів імен та типів у MS Visual Studio?

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

Microsoft Visual Studio. Виклик утиліти Object Browser

Рис. 3. Виклик утиліти Object Browser

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

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

Microsoft Visual Studio. Вікно Object Browser з виділеною збіркою mscorlib.dllРис. 4. Вікно Object Browser з виділеною збіркою mscorlib.dll

Якщо розкрити вміст збірки mscorlib (знак “+”), то буде відображено список усіх просторів імен даної збірки (рисунок 5). Як видно з рисунку, збірка включає простори імен Microsoft.Win32, System, System.Collections, System.Collections.Concurrent та багато інших.

Microsoft Visual Studio. Вікно Object Browser. Збірка mscorlib та список просторів імен, що входять в неї

Рис. 5. Збірка mscorlib та список просторів імен, що входять в неї

Аналогічно розкривається будь-який з просторів імен. У просторах імен описуються типи. У типах описуються методи, властивості, константи тощо.

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

Microsoft Visual Studio. Вікно Object Browser. Вміст класу BinaryReader

Рис. 6. Вміст класу BinaryReader


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

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

Приклади підключення просторів імен:

using System; // підключення простору імен System
using System.IO; // підключення простору імен System.IO
using System.Windows.Forms;

Після підключення простору імен можна звертатися до типів, які в них реалізовані.