- •Деякі основні переваги платформи .Net
- •Введення в будівельні блоки платформи .Net (clr, cts і cls)
- •Роль бібліотек базових класів
- •Що привносить мова c#
- •Порівняння керованого і некерованого коду
- •Інші мови програмування, орієнтовані на .Net
- •Життя в багатомовному оточенні
- •Переваги мови cil
- •Огляд збірок .Net
- •Роль мови сil
- •Переваги мови cil
- •Компіляція cil-коду в інструкції, специфічні для платформи
- •Роль метаданих типів .Net
- •Роль маніфесту збірки
- •Поняття загальної системи типів (cts)
Огляд збірок .Net
Яка б мова. NEТ не була б вибраний для програмування, важливо розуміти, що хоча виконавчі модулі .NET мають те ж саме файлове розширення, як і некеровані виконавчі компоненти Windows (*. Dll або *. Ехе), внутрішньо вони влаштовані зовсім по-іншому . Зокрема, виконавчі модулі. NEТ містять не специфічні, а незалежні від платформи інструкції на проміжну мову (Intermediate Language - IL) і метадані типів. На рис. 1.3 показано, як все це виглядає схематично.
Коли файл *. Dll або *. Ехе буде створений за допомогою .NET-компілятора, отриманий великий двійковий об'єкт називається складанням. Всі численні деталі, що стосуються збірок .NET, докладно розглядаються в розділі 14. Однак для спрощення поточної дискусії необхідно розуміти деякі основні властивості цього нового файлового формату.
Як вже згадувалося, збірка містить код CIL, який концептуально схожий на байт-код Java тим, що не компілюється в специфічні для платформи інструкції до тих пір, поки це не стане абсолютно необхідним. Зазвичай "абсолютна необхідність" настає тоді, коли на блок інструкцій CIL (такий як реалізація методу) проводиться посилання для його використання виконуючою середовищем .NET.
Крім інструкцій CIL збірки також містять метадані, які детально описують характеристики кожного "типу" всередині двійкового модуля. Наприклад, якщо є клас з іменем SportsCar, метадані типу описують такі деталі, як базовий клас SportsCar, реалізовані SportsCar інтерфейси (якщо є), а також повні описи всіх членів, підтримуваних SportsCar. Метадані .NET завжди представляються всередині збірки і автоматично генеруються компілятором відповідної мови .NET.
Нарешті, крім інструкцій CIL і метаданих типів, самі збірки також описуються за допомогою метаданих, які офіційно називаються маніфестом. Маніфест містить інформацію про поточну версію збірки, відомості про культуру (застосовувані для локалізації строкових і графічних ресурсів) і список посилань на всі зовнішні збірки, які потрібні для правильного функціонування. Різноманітні інструменти, які можна використовувати для дослідження типів, метаданих і маніфестів збірок, розглядаються в кількох наступних розділах.
Роль мови сil
Тепер давайте трохи більш докладно подивимося, що собою представляє код CIL, метадані типів і маніфест збірки. CIL - це мова, яка знаходиться вище будь-якого конкретного набору специфічних для платформи інструкцій. Наприклад, наведений нижче код C# моделює простий калькулятор. Не заглиблюючись поки в деталі синтаксису, зверніть увагу на формат методу Add () у класі Calc.
/ / Клас Calc.cs
using System;
namespace CalculatorExample
{
/ / Цей клас містить точку входу програми.
class Program
{
static void Main ()
{
Calc з = new Calc ();
int ans = c.Add (10, 84);
Console. WriteLine {1110 + 84 is {0}. ", Ans);
/ / Очікувати натискання користувачем клавіші <Enter> перед виходом.
Console.ReadLine ();
}
}
/ / Калькулятор на С #.
class Calc
{
public int Add {int x, int y)
{Return x + у;}
}
}
Переваги мови cil
На цьому етапі може виникнути питання про те, яку вигоду приносить компіляція вихідного коду в CIL, а не безпосередньо в набір орієнтованих на конкретну платформу інструкцій. Одним з найбільш важливих переваг такого підходу є мовна інтеграція. Як вже можна було побачити, всі компілятори .NET генерують приблизно однакові CIL-інструкції. Завдяки цьому всі мови можуть взаємодіяти в рамках чітко окресленої двійковій "арени".
Більше того, оскільки CIL не залежить від платформи, сама .NET Framework є незалежною від платформи, надаючи ті ж самі переваги, до яких звикли розробники на Java (наприклад, єдину кодову базу, здатну працювати в середовищах різних операційних систем). Насправді існує міжнародний стандарт для мови C# і великої підмножини платформи. NEГГ, а також реалізації для багатьох операційних систем, відмінних від Windows (більш докладно про це йтиметься в кінці цього розділу).
