C# (читається як “сі шарп”) – проста, потужна, статично типізована, об’єктно орієнтована мова програмування від компанії Microsoft. C# входить до сімейства мов програмування C, синтаксис мови буде знайомим програмістам, що працювали з C, C++, Java та JavaScript.
Перша версія мови C# була створена в 1998-2001 роках, групою інженерів Microsoft під керівництвом Андреса Гейлсберга та Скотта Вільтаумота, як основна мова програмування платформи Microsoft .Net.
C# увібрав в себе найкращі властивості попередників – мов C, C++, Modula, Object Pascal, спираючись на практичний досвід їх використання. Деякі проблематичні моделі, що до цього використовувались у мовах програмування, зокрема множинне спадкування класів(яке використовується у мові С++), були свідомо виключені.
В багатьох відношеннях мова C# дуже схожа на Java, це відображено в синтаксисах та основних поняттях цих мов програмування.
Історія виникнення
Назва мови C# трактується як наступне покоління розвитку С++, а символ # – символізує “++++”. Спочатку в назві фігурував дієз - “♯”(англійською sharp), однак через відсутність цього символу на клавіатурі, використовується знак для позначення номеру “#”. Загалом назву мови можна позначати обома символами.
Розробка мови C# розпочалася в грудні 1998 року, та готувався до випуску разом з продуктами групи Millenium. Проект мав назву COOL(C-style Object Oriented Language), та розроблявся як аналог Java від компанії Oracle. C# був анонсований, широкому загалу, в 2000 році, як основна мова платформи Microsoft .Net Framework. В цьому ж році з’явилася перша загальнодоступна бета-версія.
Перша фінальна версія мови програмування C# була випущена в 2002 році разом з середовищем інтегрованої розробки програмного забезпечення Visual Studio .Net.
Подібно до Java, C# отримав наступні концепції:
- віртуальна машина – платформа .Net виконує програму подібно до віртуальної машини від Java;
- байт-код – програмний код компілюється в проміжкову мову MSIL(Microsoft Intermediate Language), а вже потім перетворюється на машинну мову, в залежності від платформи на якій запускається програма;
- керований код – оскільки програми, написані на C#, виконуються виключно у віртуальному середовищі CLR(Common Language Runtime), це дає змогу контролювати виконання програми та у будь який момент зупинита її, а також контролювати використання пам’яті програмою, за необхідності - збільшувати, чи видаляти частини пам’яті, які використовує програма.
Версії мови C#
Версія 1
В першу версію мови увійшли:
- властивості – конструкції подібні до полів класу, основною відмінністю від останніх є те, що при звертанні до властивостей виконуються методи get set;
- індексатори – подібні до властивостей, але на вхід приймають індекс, як це реалізовано в масивах;
- події – парадигми програмування, в якій на виконання програми залежить від дій користувача(взаємодія за допомогою пристроїв вводу), повідомлень отриманих від інших програм, потоків чи операційної системи;
- цикли – конструкції, що дозволяють багатократно повторювати частини коду;
- делегати – класи, які зберігають в собі посилання на методи;
- структури – типи даних, які можуть містити набори значень відповідних типів.
Крім наведених, мова отримала деякі можливості, які були відсутні в Java:
- беззнакові типи даних;
- оператор goto;
- перевантаження(перевизначення) операторів;
- передача в метод параметрів за посиланням;
- методи з різним числом параметрів(реалізується шляхом перевантаження);
В C# також залишилася можливість, хоча і дуже обмежена, використовувати вказівники.
Версія 2
В цю версію мови увійшли такі нововведення:
- можливість розділити один клас на декілька фізичних файлів;
- nullable типи даних, які позначаються як тип?, наприклад double? d = null;
- узагальнені типи даних, або generics, які підтримуються на рівні CLR;
- ітератор yield;
- анонімні методи;
- новий оператор “??”, який є спрощеною формою тернарного оператора, для перевірки об’єкта на null. Записи x = o1 != null ? o1 : o2; та x = o1 ?? o2 ідентичні;
Версія 3
- підтримка LINQ(language integrated query) – синтаксису, що дозволяє використовувати запити, подібні до SQL, до різних типів даних;
- створення об’єкту з одночасною ініціалізацією полів;
- лямбда вирази;
- неявна типізація, шляхом введення ключового слова var;
- анонімні типи даних;
- методи розширення;
Версія 4
Найважливим нововведенням став тип даних dynamic, який дозволив реалізовувати пізнє зв’язування об’єктів, для використання з:
- динамічно типізованими мовами Python, Ruby;
- автоматизацією продуктів Microsoft Office чрез використання COM-об’єктів;
Крім цього в мову увійшли наступні можливості:
- бібліотека для роботи з паралельними завданнями;
- клас MemoryCache для кешування даних;
- класи мультипоточних колекцій в System.Collections.Concurrent;
Версія 5
Ця версія розширилась набором класів для роботи з асинхронними операціями. З’явились ключові слова async, await, а такох TAP шаблон(Task-based Asynchronous Pattern).
Версія 6
Всі зміни, що увійшли в цю версію мови С#, є синтаксичним цукром – спрощують написання конструкцій.
- ініціалізація властивостей зі значеннями (public int Number { get; set; } = 42;);
- інтерполяція рядків, дозволила використання імен змінних при побудові рядків (text = $“Hello {name}”);
- лямбда-вирази для спрощеного запису методів (public int Sqr(int a) => a*a;);
- імпорт статичних класів;
- ініціалізація Dictionary;
- Елвіс (null умовний) оператор - “?.”
- оператор nameof, що повертає назву елемента, який в нього передано;
- await в catch і finally блоках;
- фільтри виключень.
Версія 7
- бінарні літерали – для запису чисел у двійковій формі (0b0001);
- локальні функції;
- кортежі (tuples), які дозволяють методу повернути декілька значень одночасно;
- співставлення з шаблоном (pattern matching) – дозволяє писати конструкції if(x is int i);
- можливість повертати посилання на об’єкт.
Платформа .Net
Як Ви бачите, мова C# та платформа .Net постійно розвивається, вбираючи в себе найкращі практики використання мов програмування.
Багатомовність
Окрім C#, середовище CLR підтримує багато інших мов програмування, зокрема в Microsoft розробляють Visual Basic .Net та F#. Крім цього існують .Net реалізації мов: Delphi.Net, IronPython, IronRuby, Boo, PascalABC.Net.
Кроссплатформенність
.Net дозволяє розробляти програмне забезпечення під різні операційні системи: Windows, MacOS, Linux, Android, iOS. Mono – реалізація .Net для Linux. Середовища для розробки: Visual Studio, Visual Studio Code, Unity3D, Xamarin, SharpDevelop, MonoDevelop покривають всі операційні системи і технології, та дозволяють розробляти мабільні, настільні(desktop), Web, вбудовані(embedded) додатки та сервіси.
Різноманітність технологій
Середовище CLR та бібліотеки класів .Net Framework включають в себе основу для багатьох технологій, які розробники можуть використовувати при створенні продуктів. Зокрема LINQ, EntityFramework, ADO.Net – технології, що використовуються для роботи з даними. Технології WindowsForms, WPF, ASP.Net, ASP.Net MVC – для створення desktop та Web додатків.