Start Debugging

Возможности C# 14

Что на самом деле вошло в C# 14, с кодом.

Эта подборка собирает всё, что я писал о возможностях языка C# 14: union-типы, partial-конструкторы и события, extension-типы и мелкие эргономические улучшения, которые легко пропустить в официальных release notes.

С чего начать

Если вы переходите с C# 12, начните со статей об union-типах и partial-членах - это самые заметные изменения поведения. Остальное - улучшения удобства.

Что на этой странице

Список ниже автоматически собирает статьи с любым из тегов: c# 14, csharp 14, c#, csharp, c# language. Сначала самые новые.

Указатель (217 статей)

2026 / 07

  • Как добавить сжатие ответов в API на ASP.NET Core 11

    Полное руководство по сжатию ответов в ASP.NET Core 11: AddResponseCompression и UseResponseCompression, новый встроенный провайдер Zstandard рядом с Brotli и Gzip, уровни сжатия, EnableForHttps и риск CRIME/BREACH, пользовательские MIME-типы, порядок middleware и когда стоит доверить это обратному прокси.

  • Как вернуть типизированное объединение Results<T1, T2> из эндпоинта minimal API в ASP.NET Core 11

    Объявите тип возврата обработчика как Results<Ok<T>, NotFound> и возвращайте TypedResults.Ok / TypedResults.NotFound: объединение даёт проверку на этапе компиляции того, что обработчик возвращает только то, что объявляет, и само описывает себя для OpenAPI, так что вам никогда не придётся писать .Produces вручную. Рассматриваются асинхронные обработчики, ограничение в шесть типов и тестирование в ASP.NET Core 11.

  • Как добавить кеширование выходных данных в minimal API на ASP.NET Core 11

    Полное рабочее руководство по кешированию выходных данных в minimal API на ASP.NET Core 11: AddOutputCache и UseOutputCache, CacheOutput на конечных точках и MapGroup, именованные и базовые политики, Expire, VaryByQuery и VaryByHeader, вытеснение по тегам с EvictByTagAsync, защита от cache stampede, повторная валидация через ETag и хранилище на Redis.

  • Как настроить документ OpenAPI с помощью AddOperationTransformer и AddSchemaTransformer в ASP.NET Core 11

    Подробный разбор встроенного конвейера трансформеров OpenAPI в .NET 11: трансформеры операций и схем, объекты контекста, порядок выполнения, трансформеры, активируемые через DI, а также рецепты для заголовков, ответов, примеров и точечных изменений свойств.

  • .NET 11 Runtime Async отказывается от флага EnablePreviewFeatures

    По мере того как предварительные версии .NET 11 приближаются к ноябрьскому выпуску, Runtime Async повзрослел: проекты net11.0 включают его одним свойством MSBuild, а сами библиотеки среды выполнения теперь компилируются с ним.

  • Что такое PGO в .NET и нужно ли его включать?

    PGO (оптимизация на основе профиля) позволяет JIT-компилятору .NET специализировать горячий код под типы и ветви, которые действительно встречаются в вашей нагрузке. Dynamic PGO включён по умолчанию начиная с .NET 8, поэтому в .NET 8 и более поздних версиях включать его не нужно. Вот что он делает, как увидеть его эффект и те редкие случаи, когда стоит тронуть настройку.

  • Что такое многоуровневая компиляция и как о ней рассуждать?

    Многоуровневая компиляция позволяет JIT в .NET компилировать каждый метод дважды: сначала быстро и без оптимизаций, чтобы приложение запустилось, а затем ещё раз с полными оптимизациями, когда среда выполнения узнаёт, что метод горячий. Здесь показано, как tier 0, tier 1, замена на стеке и Dynamic PGO складываются вместе, и как их наблюдать и настраивать.

  • Что такое контракт IHostedService и когда его использовать?

    IHostedService -- это интерфейс из двух методов (StartAsync/StopAsync), которые универсальный хост .NET вызывает при запуске и корректном завершении. Вот что гарантирует контракт, когда реализовывать его напрямую и какие изменения поведения в .NET 10 и 11 застают людей врасплох.

  • Что такое trim-safe код и как его писать?

    Trim-safe код -- это код, который триммер .NET может статически доказать как достижимый, поэтому он выживает при удалении неиспользуемого кода из self-contained приложения. Это практическое руководство: включите анализатор, доведите каждое предупреждение IL2xxx до нуля, аннотируйте рефлексию с помощью DynamicallyAccessedMembers, распространите RequiresUnreferencedCode на публичные API и замените неанализируемые паттерны генераторами исходного кода.

  • Исправление: CS9035 "Required member 'X' must be set in the object initializer" в C#

    CS9035 означает, что член, помеченный как required, не был присвоен. Присвойте его в инициализаторе объекта или добавьте конструктор с [SetsRequiredMembers], который присваивает каждый член required.

  • Как настроить ответы об ошибках валидации в minimal API с помощью IProblemDetailsService в ASP.NET Core 11

    Вызовите AddProblemDetails с колбэком CustomizeProblemDetails, чтобы изменить форму ответа 400, который встроенная валидация minimal API возвращает в ASP.NET Core 11: добавьте traceId, перепишите title, замените 400 на 422 или получите полный контроль с помощью собственного IProblemDetailsWriter.

  • Как настроить JWT bearer-аутентификацию в minimal API в ASP.NET Core 11

    Полная рабочая настройка JWT bearer-аутентификации в minimal API в ASP.NET Core 11: установить пакет, подключить AddAuthentication().AddJwtBearer(), выпустить токен, защитить endpoint через RequireAuthorization, добавить политики ролей и claim, и протестировать всё это с помощью dotnet user-jwts.

  • Как использовать именованные фильтры запросов для мягкого удаления и мультитенантности в EF Core 11

    Примените два независимых глобальных фильтра запросов к одной сущности в EF Core 11: фильтр мягкого удаления и фильтр тенанта, каждый с именем, чтобы можно было отключить один без другого через IgnoreQueryFilters.

  • Как реализовать и использовать IAsyncDisposable с await using в C#

    Полное руководство по IAsyncDisposable в C#: когда применять await using, как правильно писать DisposeAsync и DisposeAsyncCore, и какие детали со стекированием и ConfigureAwait приводят к утечке ресурсов.

  • Как пробросить CancellationToken через асинхронные методы в .NET 11

    Проведите CancellationToken чисто через каждый слой асинхронной цепочки вызовов в .NET 11: соглашение о последнем параметре, значения по умолчанию, связанные токены, RequestAborted в ASP.NET Core и анализатор CA2016, который находит забытые.

  • Ограничение времени выполнения асинхронной операции с помощью CancellationTokenSource.CancelAfter в C#

    Используйте CancellationTokenSource.CancelAfter для задания дедлайна асинхронных операций в .NET 11: конструктор против CancelAfter, связанные токены, обработка исключений, Task.WaitAsync, TryReset для пула объектов и тестируемые тайм-ауты с TimeProvider.

2026 / 06

2026 / 05

2026 / 04

2026 / 02

2026 / 01

2025 / 04

2025 / 01

2024 / 12

  • Что нового в C# 14.0

    Обзор всех новых возможностей C# 14.0, включая ключевое слово field, члены расширения, null-условное присваивание, неявные преобразования span и многое другое.

  • История версий языка C#

    Эволюция C# превратила его в современный высокопроизводительный язык. Это руководство отслеживает каждую важную веху. Ранние годы (C# 1.0 - 1.2). C# был выпущен в 2002 году как основной язык для .NET Framework. Он напоминал Java, но с фокусом на разработке под Windows. Версия 1.2 появилась вскоре после с небольшими...

2023 / 11

2023 / 10

  • C# Как помечать функциональность как экспериментальную

    Начиная с C# 12, новый ExperimentalAttribute позволяет помечать типы, методы, свойства или сборки как экспериментальные. Узнайте, как использовать его с diagnosticId, pragma-тегами и UrlFormat.

  • C# параметры ref readonly

    Модификатор ref readonly в C# даёт более прозрачный способ передавать ссылки только для чтения. Узнайте, как он улучшает модификатор in за счёт более чётких ограничений и видимости для вызывающей стороны.

  • C# как перемешать массив?

    Самый простой способ перемешать массив в C# — использовать Random.Shuffle, появившийся в .NET 8. Метод работает in-place как с массивами, так и со спанами.

  • C# Что такое NullReferenceException и как её исправить?

    Узнайте, что вызывает NullReferenceException в C#, как её отлаживать и как предотвращать с помощью проверок на null, оператора null-conditional и ссылочных типов, допускающих null.

  • Добавление/удаление TypeInfoResolver у существующих JsonSerializerOptions

    Узнайте, как добавлять или удалять экземпляры TypeInfoResolver у существующих JsonSerializerOptions с помощью нового свойства TypeInfoResolverChain в .NET 8.

  • C# 12 Interceptors

    Знакомимся с interceptors из C# 12 — экспериментальной возможностью компилятора в .NET 8, позволяющей подменять вызовы методов на этапе компиляции с помощью атрибута InterceptsLocation.

2023 / 09

2023 / 08

  • C# 12 Inline arrays

    Inline arrays позволяют создать массив фиксированного размера внутри struct. Такая структура с inline-буфером по производительности сравнима с unsafe fixed size buffer. Inline arrays в первую очередь рассчитаны на команду runtime и некоторых авторов библиотек для улучшения производительности в определённых сценариях. Скорее всего...

  • C# 12 collection expressions

    C# 12 вводит новый упрощённый синтаксис создания массивов. Выглядит он так: Важно: тип массива должен быть указан явно, поэтому использовать var для объявления переменной нельзя. Аналогично, чтобы создать Span<int>, можно сделать так: Многомерные массивы Преимущества этого лаконичного синтаксиса...

  • C# Как дождаться завершения процесса?

    Дождаться завершения процесса можно с помощью метода WaitForExit. Ваш код синхронно подождёт, пока процесс завершится, и затем продолжит выполнение. Рассмотрим пример: Этот код запустит новый процесс cmd.exe и выполнит команду timeout 5. Вызов process.WaitForExit() заставит вашу программу...

  • C# 12 alias для любых типов

    Директива using alias в C# 12 стала более гибкой и теперь позволяет создавать алиасы для любых типов, а не только для именованных. Это значит, что вы можете создавать алиасы для tuples, указателей, массивов, обобщённых типов и т. д. Вместо полной структурной формы tuple теперь можно дать короткий описательный алиас...

  • Есть ли в C# аналог инструкции With...End With?

    Инструкция With...End With в VB позволяет выполнять серию операторов, которые многократно обращаются к одному объекту, используя упрощённый синтаксис доступа к его членам. Есть ли аналог в C#? Нет. Ближайший аналог - инициализаторы объектов, но они работают только при создании новых экземпляров.

2023 / 07

  • C# 12 - Первичные конструкторы

    Начиная с C# 12, можно объявлять первичный конструктор внутри классов и структур. Параметры размещаются в скобках сразу после имени типа. Они имеют широкую область видимости: могут инициализировать свойства или поля, использоваться как переменные в методах и локальных функциях, а также передаваться в базовый конструктор.

2023 / 06

  • Как начать программировать на C#

    Руководство для начинающих по началу программирования на C#: от установки Visual Studio до написания первой программы и поиска ресурсов для обучения.

  • Как перейти на C# 12

    Исправьте ошибки версии языка C# 12, обновив target framework до .NET 8 или указав LangVersion в файле .csproj.

  • Что нового в C# 12

    Обзор новых возможностей C# 12: первичные конструкторы, параметры лямбда по умолчанию, выражения коллекций, inline arrays и многое другое.

2023 / 05

2023 / 03

2020 / 11

2020 / 05

  • C# using var (using-объявление)

    Используйте using-объявления C# 8 (`using var`) для освобождения объектов IDisposable без вложенных фигурных скобок. Синтаксис, правила области видимости и когда лучше использовать блок `using`.

2020 / 04

2019 / 01

2013 / 10

2013 / 06

2013 / 05

2012 / 01

Все подборки Главная