Базові поняття технології
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.
Мал. 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.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.
Приклади підключення просторів імен:
Після підключення простору імен можна звертатися до типам, які в них реалізовані.