Что нового в C# 8.0

Microsoft активно развивает язык программирования C Sharp. Работа над последней, восьмой версией началась сразу же после релиза седьмой. Стадия разработки и обсуждения растянулась больше чем на два года. Итоговая версия была выпущена в сентябре 2019. Специалисты, работающие с этим языком программирования, начали активно интересоваться, что нового в C# 8.0. Обновлений достаточно много, в этой статье мы затронем наиболее важные из них.

Подпишись на группу Вконтакте и Телеграм-канал. Там еще больше полезного контента для программистов.
А на YouTube-канале ты найдешь обучающие видео по программированию. Подписывайся!

Default interface methods

Методы интерфейсов по умолчанию — одно из наиболее заметных нововведений в C Sharp 8. Была введена поддержка виртуальных методов расширения, то есть методов в интерфейсах с предопределенной реализацией. Теперь класс или структура, реализующие интерфейс, должны либо предоставить свою реализацию метода, либо унаследовать ее от интерфейса. Это позволит исключить дублирование кода в тех случаях, когда классы, реализующие интерфейс C#, содержат одинаковую реализацию.

Нововведение также позволяет добавлять реализацию по умолчанию, не теряя при этом совместимости с существующими классами, которые реализуют интерфейс.

Null-coalescing assignment

Null-объединяющее присвоение — обновление из разряда «синтаксического сахара». Целью его введения стало упрощение синтаксических конструкций, которые содержат переменную со значением null.

В C Sharp 8 появился оператор null-объединения, который имеет вид ??=.

Его можно использовать, чтобы присвоить значение правого операнда левому только в тех случаях, когда левый операнд имеет значение ноль.

Nullable reference types C# 8.0

Еще одним крупным нововведением стало изменение, коснувшееся ссылочных типов, допускающих null.

Проблема нулевой ссылки в предыдущих версиях языка программирования была решена лишь частично. Многие разработчики надеялись на появление решения, которое полностью исключило бы возможность присвоения значения null переменным случных типов.

Что нового в C# 8.0 в этом плане? Разработчики пришли к выводу, что будет лучше, если все ссылочные типы не будут поддерживать null по умолчанию. При этом их null можно будет сделать совместимым, если декорировать его вопросительным знаком.

При работе со старым кодом такое поведение можно будет отключить, чтобы не получать бесконечные предупреждения.

Asynchronous streams

После появления асинхронной реализации в пятом релизе языка программирования в нем оставались некоторые неподдерживаемые сценарии, такие как перечисление foreach.

В предыдущих версиях для того, чтобы использовать foreach с результатом асинхронного метода, разработчики вынуждены были либо получать все результаты одновременно асинхронно, либо смириться с синхронным перечислением.

Что нового в C# 8.0? В новую версию была добавления новая конструкция foreach await. Теперь использование асинхронного потока будет требовать добавления ключевого слова await.

Появился новый интерфейс IAsyncEnumerable для управления асинхронными коллекциями и итераторами. Асинхронная версия поддерживает отмену через CancellationToken и метод расширения ConfigureAwait.

Pattern matching enhancements

В восьмую версию был добавлен ряд соответствий шаблону (они же сопоставления с образцом).

Конструкция is была расширена для проверки выражения на соответствие шаблону. При этом шаблоны можно вкладывать друг в друга. Поддерживается четыре вида шаблонов: type, constant, discard, var.

Что нового в C# 8.0 — Итоги

Развитие любого языка программирования — это нахождение баланса между нововведениями и совместимостью с предыдущими версиями. Восьмой релиз C Sharp успешно решает обе задачи. Язык развивается в соответствии с требованиями времени, оставаясь при этом доступным и объектно-ориентированным.

Также рекомендую прочитать статью String C# | Работа со строками в C#. А также подписывайтесь на группу ВКонтакте, Telegram и YouTube-канал. Там еще больше полезного и интересного для программистов.