- •Деякі основні переваги платформи .Net
- •Введення в будівельні блоки платформи .Net (clr, cts і cls)
- •Роль бібліотек базових класів
- •Що привносить мова c#
- •Порівняння керованого і некерованого коду
- •Інші мови програмування, орієнтовані на .Net
- •Життя в багатомовному оточенні
- •Переваги мови cil
- •Огляд збірок .Net
- •Роль мови сil
- •Переваги мови cil
- •Компіляція cil-коду в інструкції, специфічні для платформи
- •Роль метаданих типів .Net
- •Роль маніфесту збірки
- •Поняття загальної системи типів (cts)
Роль бібліотек базових класів
На додаток до середовища CLR і специфікаціям CTS / CLS, платформа .NET надає бібліотеку базових класів, яка доступна всім мовам програмування .NET Ця бібліотека не тільки інкапсулює різноманітні примітиви, такі як потоки, файловий ввід-вивід, системи візуалізації графіки і механізми взаємодії з різними зовнішніми пристроями, але також забезпечує підтримку для численних служб, необхідних більшістю реальних додатків.
Бібліотеки базових класів визначають типи, які можна використовувати для побудови програмних додатків будь-якого виду. Наприклад, ASP.NET можна застосовувати для побудови веб-сайтів, WCF - для створення мережевих служб, WPF - для написання настільних додатків з графічним інтерфейсом користувача і т.д. Крім того, бібліотеки базових класів надають типи для взаємодії з XML-документами, локальним каталогом і файловою системою поточного комп'ютера, для комунікацій з реляційними базами даних (через ADO.NET) і т.п. На високому рівні відносини між CLR, CTS, CLS і бібліотеками базових класів виглядають так, як показано на рис. 1.1.
Що привносить мова c#
Синтаксис мови програмування C# виглядає дуже схожим на синтаксис мови Java. Однак називати C# клоном Java неправильно. У дійсності і С #, і Java є членами сімейства мов програмування, заснованого на С (куди також входять С, Objective С, C++ ), і тому вони поділяють схожий синтаксис.
Правда полягає в тому, що багато синтаксичні конструкції C# змодельовані на основі різноманітних аспектів мов Visual Basic (VB) і C++ . Наприклад, подібно VB, мова C# підтримує ідею властивостей класу (як протилежність традиційним методам вилучення і установки) і необов'язкові параметри. Подібно C ++, мова C# дозволяє перевантажувати операції, а також створювати структури, перерахування та функції зворотного виклику (за допомогою делегатів).
Більше того, у міру вивчення матеріалу цієї книги, ви дуже скоро побачите, що C# підтримує безліч засобів, які традиційно зустрічаються в різних мовах функціонального програмування (наприклад, LISP або Haskell), скажімо, лямбда-вирази і анонімні типи. До того ж, з появою технології LINQ [Language Integrated Query - мова інтегрованих запитів), мова C# стала підтримувати конструкції, які роблять її досить унікальною у світі програмування. Незважаючи на все це, найбільший вплив на неї зробили саме мови, засновані на С.
Внаслідок того, що C# представляє собою гібрид з декількох мов, вона є такою же синтаксично чистою - якщо не чистіше - як і Java, майже настільки ж простою, як VB, і практично такою же потужною і гнучкою, як C++ . Нижче наведений далеко не повний список ключових особливостей мови С #, які характерні для всіх її версій.
• Показники використовувати не потрібно! У програмах на C# зазвичай не виникає потреби в маніпулюванні показниками безпосередньо (хоча у випадку абсолютної необхідності можна опуститися на цей рівень, як буде показано в главі 11).
• Автоматичне управління пам'яттю допомогою збірки сміття. Враховуючи це, ключове слово delete в C# не підтримується.
Формальні синтаксичні конструкції для класів, інтерфейсів, структур, перерахувань і делегатів.
• Аналогічно мови C++ можливість перевантаження операцій для спеціальних типів без зайвих складнощів (наприклад, забезпечення "повернення * this, щоб дозволити зв'язування в ланцюжок" - не ваша турбота).
• Підтримка програмування на основі атрибутів. Цей різновид розробки дозволяє анотувати типи та їх членів з метою додаткового уточнення їх поведінки. Наприклад, якщо позначити метод атрибутом [Obsolete], при спробі використання цього члена програмісти отримають відповідне спеціальне попередження.
З виходом версії .NET 2.0 (приблизно в 2005 р.), мова програмування C# була оновлена для підтримки численних нових функціональних можливостей, найбільш значимі з яких перераховані нижче.
• Можливість створення узагальнених типів і узагальнених членів. Використовуючи узагальнення, можна створювати дуже ефективний і безпечний до типів код, який визначає безліч заповнювачів, що вказуються під час взаємодії з узагальненими елементами.
• Підтримка анонімних методів, які дозволяють надавати вбудовану функцію скрізь, де потрібно тип делегата.
• Можливість визначення єдиного типу в декількох файлах коду (або, якщо необхідно, у вигляді подання в пам'яті) з використанням ключового слова partial.
У версії .NET 3.5 (що вийшла приблизно в 2008 р.) в мову програмування C# була додана додаткова функціональність, включаючи такі засоби.
• Підтримка суворо типізованих запитів (тобто LINQ), застосовуваних для взаємодії з різноманітними формами даних. Запити LINQ ви вперше зустрінете в главі 12.
• Підтримка анонімних типів, які дозволяють моделювати форму типу, а не його поведінку.
• Можливість розширення функціональності існуючого типу (не створюючи його підкласи) з використанням розширюють методів.
• Включення лямбда-операції (=>), яка ще більше спрощує роботу з типами делегатів .NET.
• Новий синтаксис ініціалізації об'єктів, який дозволяє встановлювати значення властивостей під час створення об'єкта.
Версія .NET 4.0 (вийшла в 2010 р.) доповнила C# ще рядом засобів, у тому числі зазначеними нижче.
• Підтримка необов'язкових параметрів, а також іменованих аргументів на методах.
• Підтримка динамічного пошуку членів під час виконання через ключове слово dynamic. Як буде показано в главі 18, це забезпечує універсальний підхід до виклику членів на льоту незалежно від інфраструктури, за допомогою якої вони були реалізовані (COM, IronRuby, IronPython або служби рефлексії .NET).
• Робота з узагальненими типами стала набагато зрозумілішою, враховуючи можливість легкого відображення узагальнених даних на універсальні колекції System. Object через коваріантність і контраваріантність.
Все це підводить нас до поточної версії С #, що входить до складу платформи .NET 4.5.
У цій версії C# з'явилася пара нових ключових слів (async і await), які значно спрощують багатопоточне і асинхронне програмування. Ті, кому доводилося працювати з попередніми версіями С #, можуть пригадати, що виклик методів через вторинні потоки вимагав досить великого обсягу малозрозумілого коду і використання різних просторів імен .NET. Завдяки тому, що тепер C# підтримує мовні ключові слова, які автоматично вирішують ці завдання, процес виклику методів асинхронним чином майже настільки ж простий, як їх виклик до синхронної манеру. Більш докладно ці теми розглядаються в розділі 19.
