C Sharp¶
C Sharp (произносится «си шарп») — это объектно-ориентированный язык программирования общего назначения с безопасной системой типов, разработанный компанией Microsoft в 2000—2001 годах как часть платформы .NET Framework. C Sharp сочетает возможности C++ с простотой и строгостью типизации Java, поддерживает компонентно-ориентированное программирование, автоматическое управление памятью (сборку мусора) и кроссплатформенную разработку. Язык входит в стандарты ECMA-334 и ISO/IEC 23270, а его основная реализация — компилятор Roslyn — распространяется по открытой лицензии MIT.
¶История
¶Предпосылки создания
В конце 1990-х годов Microsoft активно развивала платформу COM (Component Object Model) и язык Visual Basic, однако их ограничения (отсутствие наследования реализации, сложность управления памятью, привязка к Windows) затрудняли создание крупных корпоративных приложений. В то же время Java, предложенная Sun Microsystems, набирала популярность благодаря кроссплатформенности и автоматической сборке мусора, но Microsoft не могла лицензировать её под свои нужды из-за судебных разбирательств.
¶Разработка и выпуск
В 1998 году Microsoft начала проект под кодовым названием «COOL» (C-like Object Oriented Language), который возглавил Андерс Хейлсберг — создатель Turbo Pascal и Delphi. Первая публичная демонстрация новой технологии состоялась в июле 2000 года на конференции Professional Developers Conference (PDC), где язык был представлен как C Sharp. В феврале 2002 года вышла первая стабильная версия — C# 1.0, вместе с .NET Framework 1.0. Изначально язык позиционировался как альтернатива Java для Windows-приложений, но с выходом .NET Core (2016) и .NET 5 (2020) стал кроссплатформенным.
¶Эволюция версий
- C# 1.0–1.2 (2002–2003): базовая объектно-ориентированная модель, управляемый код, делегаты, события, индексаторы.
- C# 2.0 (2005): обобщённые типы (generics), итераторы, анонимные методы, частичные классы.
- C# 3.0 (2007): LINQ (Language Integrated Query), лямбда-выражения, методы расширения, анонимные типы.
- C# 4.0 (2010): динамическое связывание (ключевое слово
dynamic), именованные и необязательные параметры, ковариантность и контравариантность обобщений. - C# 5.0 (2012): асинхронное программирование с
async/await. - C# 6.0 (2015): интерполяция строк, null-условные операторы, автосвойства с инициализацией.
- C# 7.0–7.3 (2017–2018): кортежи, сопоставление с образцом (pattern matching), локальные функции, ref-возвраты.
- C# 8.0 (2019): nullable-контексты, асинхронные потоки, индексы и диапазоны, интерфейсы с реализацией по умолчанию.
- C# 9.0 (2020): записи (records), инициализаторы свойств
init, топ-левел-инструкции, улучшенное сопоставление с образцом. - C# 10.0 (2021): глобальные using-директивы, структуры-записи, интерполяция констант.
- C# 11.0 (2022): статические абстрактные члены интерфейсов, числовые интерфейсы, список-паттерны, сырые строковые литералы.
- C# 12.0 (2023): первичные конструкторы, коллекционные выражения, псевдонимы типов с
using.
¶Классификация и парадигмы
C Sharp является мультипарадигмальным языком, поддерживающим:
- Объектно-ориентированное программирование: классы, наследование (одиночное), полиморфизм, инкапсуляция.
- Компонентно-ориентированное программирование: свойства, события, атрибуты, делегаты.
- Функциональное программирование: лямбда-выражения, LINQ, неизменяемые типы (записи), функции высшего порядка.
- Асинхронное программирование: модель
async/await, асинхронные потоки. - Динамическое программирование: ключевое слово
dynamic, взаимодействие с COM и скриптовыми языками.
¶Устройство и характеристики
¶Система типов
C Sharp — строго типизированный язык с безопасной системой типов. Все типы делятся на две категории:
- Типы значений (value types): хранятся в стеке или встроены в объекты (структуры, перечисления, примитивные типы вроде
int,double). - Ссылочные типы (reference types): хранятся в управляемой куче (классы, массивы, строки, делегаты).
Сборщик мусора (Garbage Collector) автоматически освобождает память, занятую недостижимыми объектами, что предотвращает утечки памяти. Начиная с C# 8.0 введён nullable-контекст, позволяющий явно указывать, может ли ссылочный тип принимать значение null.
¶Компиляция и исполнение
Исходный код на C Sharp компилируется в промежуточный язык (Common Intermediate Language, CIL), который затем исполняется средой Common Language Runtime (CLR) с помощью JIT-компиляции (Just-In-Time) или AOT-компиляции (Ahead-of-Time, например, в .NET Native). Начиная с .NET 6, поддерживается нативная компиляция через Native AOT.
¶Основные конструкции
- Классы и структуры: определяют типы данных и их поведение.
- Интерфейсы: задают контракты, которые могут реализовывать классы и структуры.
- Делегаты: типы, представляющие ссылки на методы с определённой сигнатурой.
- События: механизм уведомления об изменениях состояния.
- Атрибуты: метаданные, добавляемые к элементам кода.
- Обобщения: параметризованные типы и методы.
- LINQ: единообразный синтаксис запросов к коллекциям, базам данных, XML и другим источникам данных.
¶Применение
¶Разработка приложений для Windows
C Sharp является основным языком для создания Windows-приложений с использованием технологий:
- Windows Forms: классический GUI-фреймворк (с 2002 года).
- WPF (Windows Presentation Foundation): современный фреймворк с XAML-разметкой (с 2006 года).
- UWP (Universal Windows Platform): для приложений Магазина Windows (с 2015 года).
- WinUI 3: нативная библиотека интерфейсов для Windows 11 (с 2021 года).
¶Веб-разработка
C Sharp широко используется в веб-приложениях на платформе ASP.NET Core, которая позволяет создавать:
- Веб-API (RESTful, GraphQL).
- Динамические веб-сайты с использованием Razor Pages или MVC.
- Blazor — фреймворк для создания интерактивных веб-интерфейсов на C Sharp (как на стороне сервера, так и в браузере через WebAssembly).
¶Мобильная и кроссплатформенная разработка
С помощью Xamarin (до 2024 года) и .NET MAUI (Multi-platform App UI, с 2022 года) на C Sharp создаются мобильные приложения для Android и iOS, а также десктопные приложения для Windows, macOS и Linux. Unity, популярный игровой движок, использует C Sharp в качестве основного языка скриптов.
¶Разработка игр
C Sharp является стандартным языком для Unity (около 50% рынка инди-игр и мобильных игр), а также используется в Godot (с версии 4.0) и Stride. Для высокопроизводительных игр применяется комбинация C Sharp с нативным кодом через P/Invoke.
¶Корпоративные и облачные решения
C Sharp активно применяется в корпоративных системах на платформе Azure (Microsoft Azure) — облачной платформе Microsoft. С помощью Azure Functions, Azure Logic Apps и Azure Kubernetes Service на C Sharp создаются микросервисы, бессерверные приложения и ETL-процессы.
¶Научные и инженерные вычисления
Хотя C Sharp уступает Python и R в области анализа данных, существуют библиотеки для научных вычислений: Math.NET Numerics, ILNumerics, Accord.NET. Для работы с GPU используется библиотека Alea GPU.
¶Примеры кода
¶Программа «Hello, World!»
``csharp using System; Console.WriteLine("Hello, World!"); ``
¶Пример класса с наследованием
```csharp public class Animal { public string Name { get; set; } public virtual void Speak() => Console.WriteLine("..."); }
public class Dog : Animal { public override void Speak() => Console.WriteLine("Woof!"); } ```
¶Использование LINQ
``csharp var numbers = new[] { 1, 2, 3, 4, 5 }; var evenNumbers = numbers.Where(n => n % 2 == 0).ToList(); ``
¶Интересные факты
- Название «C Sharp» происходит от музыкальной нотации: диез (♯) означает повышение ноты на полтона, что символизирует улучшение языка C. В типографском начертании используется знак #, хотя официально символ — ♯.
- Андерс Хейлсберг, создатель C Sharp, ранее разработал Turbo Pascal и Delphi, а также внёс вклад в создание TypeScript.
- C Sharp стал первым языком, получившим стандарт ECMA (ECMA-334) в 2002 году, всего через год после выхода первой версии.
- В 2022 году C Sharp вошёл в десятку самых популярных языков программирования по индексу TIOBE, занимая 5-е место.
- Исходный код компилятора Roslyn (C# и Visual Basic) был открыт Microsoft в 2014 году под лицензией MIT, что позволило сообществу участвовать в развитии языка.
¶Критика
- Производительность: хотя C Sharp быстрее интерпретируемых языков (Python, JavaScript), он уступает нативным языкам (C++, Rust) из-за накладных расходов на сборку мусора и JIT-компиляцию. В последних версиях .NET (7 и 8) производительность значительно улучшена, но для низкоуровневых системных задач C Sharp не применяется.
- Зависимость от платформы: до выхода .NET Core (2016) C Sharp был привязан к Windows. Кроссплатформенные версии (Mono, .NET Core) решили эту проблему, но некоторые библиотеки остаются Windows-only.
- Сложность экосистемы: обилие фреймворков (ASP.NET, WPF, WinForms, MAUI, Xamarin) и версий .NET (Framework, Core, Standard, 5/6/7/8) может запутывать новичков.
- Отсутствие полной функциональной парадигмы: хотя C Sharp поддерживает элементы функционального программирования, он не является чисто функциональным языком, что ограничивает использование в некоторых областях (например, в параллельных вычислениях с неизменяемыми структурами).
¶Источники
- ECMA-334: C# Language Specification, 6th edition (2022).
- ISO/IEC 23270:2018 — Information technology — Programming languages — C#.
- Microsoft Docs: C# documentation (learn.microsoft.com).
- Hejlsberg, A., Wiltamuth, S., Golde, P. «C# Programming Language», 4th ed., Addison-Wesley, 2010.
- TIOBE Index for January 2024 (tiobe.com).
- «A History of C#» — Anders Hejlsberg, Channel 9, 2016.
