Rate this post

C# 14 принес с собой множество обновлений, делающих код чище, безопаснее и выразительнее. После тестирования я выделил пять лучших нововведений, хотя одно из них вызывает у меня сомнения. Давайте разберём всё по порядку.

1. Null-условное присваивание

В предыдущих версиях, например C# 13, приходилось вручную проверять объект на null перед присвоением значений свойствам:

if (channel != null) channel.Subscribers = 1000;

Рабочий, но громоздкий вариант.

Теперь, в C# 14, можно использовать null-условное присваивание, что делает код гораздо лаконичнее:

channel?.Subscribers = 1000;

Эта запись безопасно выполнит присваивание только если channel не равен null. Чисто и просто.

2. Ключевое слово field для резервных полей

Ранее при работе со свойствами вы наверняка использовали приватные резервные поля:

private int _subscribers; public int Subscribers { get => _subscribers; set => _subscribers = value; }

В C# 14 появилось ключевое слово field, позволяющее избавиться от лишних переменных:

public int Subscribers { get => field; set { if (value < 1000) throw new Exception("Недостаточно подписчиков!"); field = value; } }

Теперь код выглядит компактнее, а вы всё так же можете добавлять нужную логику в setter.

3. Пользовательские составные операторы

Эта функция действительно впечатляет. В C# 14 появились пользовательские составные операторы, с помощью которых можно переопределять такие операторы, как + или ++ для своих классов.

Пример:

public static Channel operator +(Channel c) { c.Subscribers++; c.Members++; return c; }

Теперь достаточно просто написать:

channel++;

И оба свойства — Subscribers и Members — увеличатся автоматически. Просто и красиво.

4. Новый ключевой оператор extension

Методы-расширения давно стали неотъемлемой частью C#, но их синтаксис выглядел немного устаревшим. Раньше это выглядело так:

public static class ChannelExtensions { public static void PrintDetails(this Channel channel) { Console.WriteLine($"Subs: {channel.Subscribers}, Members: {channel.Members}"); } }

Теперь в C# 14 можно использовать новое ключевое слово extension напрямую при определении расширения:

public extension Channel { public void PrintDetails() => Console.WriteLine($"Subs: {Subscribers}, Members: {Members}"); }

Работает так же, только выглядит современнее.
Правда, у меня к этой функции двоякое отношение: она добавляет гибкость, но может внести путаницу в синтаксис между версиями C#.

5. Улучшенный nameof для открытых обобщённых типов

Теперь оператор nameof поддерживает открытые обобщённые типы, чего раньше не было.

В C# 13 следующая запись не работала:

nameof(Channel<>);

А вот в C# 14 — работает и возвращает "Channel".

Изменение небольшое, но полезное при генерации кода, рефлексии и диагностике.

Итоги

C# 14 предлагает отличный набор улучшений и синтаксического сахара.
Null-условное присваивание и пользовательские составные операторы — безусловные фавориты, а ключевое слово field делает определение свойств современнее.

Новый синтаксис с extension всё ещё спорный, но в целом язык развивается в правильном направлении.