Открыть сервисСервис

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 является мультипарадигмальным языком, поддерживающим:

Устройство и характеристики

Система типов

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.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru