C# (произносится «си шарп») это язык программирования общего назначения, разработанный в Microsoft командой под руководством Андерса Хейлсберга и впервые выпущенный в 2002 году. Он статически типизирован (у каждой переменной есть тип, который компилятор проверяет до запуска программы), объектно-ориентирован (код организован в классы) и управляем (память за вас освобождает сборщик мусора). Современный C# также многое заимствует из функционального программирования: лямбды, запросы LINQ, сопоставление с образцом и неизменяемые записи.
Вот полная программа на C#. Нажмите Run:
Вывод:
Hello, Ada! It is 2026.
Для чего используется C#
C# это язык общего назначения, поэтому он встречается почти в любом виде программ, но основная его часть приходится на несколько областей:
- Игры. Unity, один из самых популярных игровых движков, использует C# как скриптовый язык. Godot тоже его поддерживает.
- Веб-бэкенды. ASP.NET Core это веб-фреймворк .NET для API, сайтов и приложений реального времени. В публичных бенчмарках он входит в число самых быстрых распространённых веб-фреймворков.
- Настольные приложения. WPF и Windows Forms на Windows, .NET MAUI и Avalonia для разных платформ.
- Облако и сервисы. Azure Functions, фоновые обработчики, микросервисы в контейнерах.
- Утилиты и автоматизация. Консольные инструменты, скрипты сборки, обработка данных.
Особенно часто он встречается в крупных компаниях, работающих на технологиях Microsoft, и в игровых студиях. Мобильные приложения можно писать на .NET MAUI (преемник Xamarin), но это ниша поменьше, чем у Kotlin или Swift.
C# и .NET не одно и то же
C# это язык. .NET это платформа, которая его выполняет, и у неё три части:
- Среда выполнения (CLR). Компилятор C# не создаёт машинный код. Он создаёт промежуточный язык (IL), который хранится в файлах
.dllили.exe. Когда программа запускается, общеязыковая среда выполнения (Common Language Runtime) компилирует этот IL в нативный код прямо во время работы (JIT), управляет памятью с помощью сборщика мусора и обеспечивает безопасность типов. - Библиотека базовых классов. Коллекции, работа с файлами, сеть, текст, даты, потоки: всё, что находится в
System.*. - SDK. Команда
dotnet, которая создаёт, собирает, тестирует и запускает проекты.
Другие языки компилируются в тот же IL (F#, Visual Basic), поэтому программа на C# может использовать библиотеку, написанную на F#.
У платформы два поколения. .NET Framework (от 1.0 в 2002 году до 4.8.1) работает только на Windows, и на нём до сих пор работает множество старых приложений. .NET (до версии 5 назывался .NET Core) это открытый кроссплатформенный преемник, который работает на Windows, Linux и macOS. Новые проекты пишут под .NET; чётные выпуски, например .NET 8 и .NET 10, получают три года долгосрочной поддержки.
Как устроена программа на C#
Программа на C# состоит из типов (классов, структур, интерфейсов, перечислений, записей), которые содержат члены (поля, свойства, методы). Выполнение начинается в статическом методе Main. Пространства имён группируют связанные типы, а директивы using позволяют обращаться к ним по коротким именам.
Вывод:
Maya: 21.00
Leo: 13.00
Кое-что видно уже здесь: Order это класс с двумя свойствами (Customer, Total), конструктором и методом. decimal это тип для денежных сумм, а суффикс m обозначает литерал decimal. var позволяет компилятору вывести тип локальной переменной, а List<Order> это обобщённая коллекция, которая принимает только объекты Order. Запись {order.Total:F2} внутри $"..." форматирует число с двумя знаками после запятой.
В реальном проекте каждый класс обычно лежит в отдельном файле, и файлы компилируются вместе в одну сборку. Подробности в разделе классы и объекты.
Статическая типизация на практике
Компилятор знает тип каждого выражения, поэтому целый класс ошибок никогда не доходит до запущенной программы. Присвоить строку переменной int, вызвать несуществующий метод или передать аргументы в неправильном порядке: всё это завершится ошибкой при компиляции с указанием строки.
Вывод:
29.97
45
Типы помогают и редактору: автодополнение, переименование и «найти все ссылки» в C# работают точно, потому что инструменты читают ту же информацию о типах, что и компилятор.
Версии C# и что они добавили
Начиная с C# 9 в 2020 году новая версия выходит каждый ноябрь вместе с новым выпуском .NET; до этого версии выходили раз в два или три года. Каждая версия проектируется так, чтобы существующий код продолжал компилироваться, а редкие исключения (например, field, ставшее ключевым словом внутри методов доступа свойств в C# 14) документируются как критические изменения, поэтому программа, написанная для C# 2, сегодня почти всегда компилируется без изменений.
| Версия | Год | Главные нововведения |
|---|---|---|
| C# 2 | 2005 | Обобщения, типы значений, допускающие null (int?), итераторы (yield) |
| C# 3 | 2007 | LINQ, лямбда-выражения, var, инициализаторы объектов, методы расширения |
| C# 4 | 2010 | dynamic, необязательные и именованные параметры |
| C# 5 | 2012 | async и await |
| C# 6 | 2015 | Интерполяция строк $"...", nameof, null-условный оператор ?. |
| C# 7 | 2017 | Кортежи, out var, сопоставление с образцом через is, разделители разрядов |
| C# 8 | 2019 | Ссылочные типы, допускающие null, switch-выражения, диапазоны s[1..4], ??=, асинхронные потоки |
| C# 9 | 2020 | Записи, методы доступа init, операторы верхнего уровня, new() с выводом целевого типа |
| C# 10 | 2021 | Глобальные using, пространства имён на уровне файла, record struct |
| C# 11 | 2022 | Необработанные строковые литералы """, члены required, шаблоны списков |
| C# 12 | 2023 | Первичные конструкторы для классов, выражения коллекций [1, 2, 3] |
| C# 13 | 2024 | Коллекции params, тип System.Threading.Lock |
| C# 14 | 2025 | Члены расширения, ключевое слово field в свойствах |
Новые версии в основном убирают лишние церемонии. Эта программа для C# 9 и новее использует операторы верхнего уровня (нет class Program, нет Main), запись и switch-выражение:
// C# 9 and later, in a .NET 6+ project (implicit usings import System)
var order = new Order("Maya", 21.00m);
Console.WriteLine(Shipping(order));
static string Shipping(Order o) => o.Total switch
{
>= 50m => "free shipping",
>= 20m => "standard shipping",
_ => "shipping fee applies"
};
record Order(string Customer, decimal Total);
Та же логика в более старом явном стиле, который компилируется в C# 6 и любой более поздней версии:
Вывод:
standard shipping
Обе формы допустимы в C#. Старый явный стиль вы встретите в существующем коде, учебниках и проектах Unity, а короткий в новых проектах .NET.
LINQ: запросы к данным прямо в языке
LINQ (Language Integrated Query, C# 3) одна из возможностей, которые чаще всего называют, объясняя, почему нравится C#. Он позволяет фильтровать, сортировать, группировать и преобразовывать любую коллекцию цепочкой методов:
Вывод:
95, 91, 88, 72
Average: 78.0
Best: 95
Тот же синтаксис работает со списками в памяти, с таблицами базы данных через Entity Framework и с XML. Подробнее в разделе LINQ.
Подходит ли C# как первый язык?
C# требует больше с самого начала, чем Python: вы объявляете типы, заканчиваете операторы точкой с запятой и помещаете код внутрь классов. Взамен компилятор рано ловит ошибки, инструменты (Visual Studio, VS Code, Rider) отличные, а понятия напрямую переносятся на Java, TypeScript, Kotlin и C++. Если вы хотите делать игры на Unity или работать в компании на .NET, это очевидный выбор. Если ваша цель анализ данных или машинное обучение, у Python экосистема больше.
Чтобы начать, установите .NET SDK и выполните dotnet new console или начните с Hello World и запускайте примеры прямо на этих страницах.
Часто задаваемые вопросы
Что такое C#?
C# (произносится «си шарп») это статически типизированный объектно-ориентированный язык программирования общего назначения, созданный в Microsoft и впервые выпущенный в 2002 году. Исходный код компилируется в промежуточный язык, который среда выполнения .NET превращает в машинный код, а памятью управляет сборщик мусора. Язык используется для веб-бэкендов, игр на Unity, настольных приложений, облачных сервисов и утилит.
C# и .NET это одно и то же?
Нет. C# это язык, а .NET это платформа, на которой он работает: среда выполнения (CLR), библиотека базовых классов (System.Collections.Generic, System.IO и так далее) и инструменты SDK. На .NET также работают F# и Visual Basic, а новая версия C# обычно выходит вместе с новой версией .NET (например, C# 12 с .NET 8).
Для чего используется C#?
Веб-API и сайты на ASP.NET Core, игры на Unity (его скриптовый язык C#), настольные приложения для Windows на WPF и WinForms, кроссплатформенные приложения на .NET MAUI, облачные сервисы и Azure Functions, а также консольные утилиты. Язык широко распространён в корпоративной разработке и в игровых студиях.
Сложно ли выучить C#?
Как первый язык он средней сложности. Синтаксис в стиле C и строже, чем в Python, поскольку у каждой переменной есть тип, который проверяет компилятор, но память управляется за вас, а сообщения об ошибках понятные. Большинство начинающих пишут полезные консольные программы уже через несколько недель практики.
Стоит ли учить C# сейчас?
Да. C# стабильно входит в число самых используемых языков в опросах разработчиков, .NET открыт и кроссплатформен, а новая версия языка выходит каждый ноябрь. Это практичный выбор, если вы хотите делать игры на Unity или работать в компаниях, построенных на технологиях Microsoft.