Menu

Что такое C#: язык, .NET, версии и первая программа

C# это статически типизированный язык общего назначения от Microsoft, который работает на .NET. Для чего он используется, как связан с .NET, что добавила каждая версия и как устроена программа на C#.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

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 это платформа, которая его выполняет, и у неё три части:

  1. Среда выполнения (CLR). Компилятор C# не создаёт машинный код. Он создаёт промежуточный язык (IL), который хранится в файлах .dll или .exe. Когда программа запускается, общеязыковая среда выполнения (Common Language Runtime) компилирует этот IL в нативный код прямо во время работы (JIT), управляет памятью с помощью сборщика мусора и обеспечивает безопасность типов.
  2. Библиотека базовых классов. Коллекции, работа с файлами, сеть, текст, даты, потоки: всё, что находится в System.*.
  3. 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# 22005Обобщения, типы значений, допускающие null (int?), итераторы (yield)
C# 32007LINQ, лямбда-выражения, var, инициализаторы объектов, методы расширения
C# 42010dynamic, необязательные и именованные параметры
C# 52012async и await
C# 62015Интерполяция строк $"...", nameof, null-условный оператор ?.
C# 72017Кортежи, out var, сопоставление с образцом через is, разделители разрядов
C# 82019Ссылочные типы, допускающие null, switch-выражения, диапазоны s[1..4], ??=, асинхронные потоки
C# 92020Записи, методы доступа init, операторы верхнего уровня, new() с выводом целевого типа
C# 102021Глобальные using, пространства имён на уровне файла, record struct
C# 112022Необработанные строковые литералы """, члены required, шаблоны списков
C# 122023Первичные конструкторы для классов, выражения коллекций [1, 2, 3]
C# 132024Коллекции params, тип System.Threading.Lock
C# 142025Члены расширения, ключевое слово 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.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ