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 всё ещё спорный, но в целом язык развивается в правильном направлении.