Нововведения в С# 8
ITVDN: курсы программирования
Видеокурсы по
программированию

Доступ более чем к 7700 видеоурокам от $19.99

Подписка
ITVDN logo
Видеокурсы по
программированию

Доступ более чем к 7700 видеоурокам от $19.99

Подписка

Хотя внимание разработчиков приковано сейчас к таким глобальным вещам, как дефолтная реализация методов интерфейсов, мы хотим поговорить с вами о нюансах новой версии популярного языка программирования С#.

Новые операторы присвоения: &&= и ||=

Начиная с самой первой версии, C# поддерживал комбинирования операторов присвоения с другими операторами. Существует поддержка всех бинарных операторов (а именно - +, -, & и так далее), кроме булевских && и ||. Теперь комбинации типа &&= и ||= дополнят этот список.

Дословно-интерполируемые строки

Дословные строки начинаются на @”. Интерполируемые строки используют $”. Но что, если нам нужно создать дословно-интерполируемую строку? Что нам писать - @$” или  $@”? Сейчас первый вариант работает, но второй выдает ошибку уровня компиляции, что может вызывать некоторые неудобства у многих разработчиков, так как обычно такие нюансы часто забывают.

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

Впрочем, некоторые все равно находят это изменение лишним, так как оно может привести к некоторой фривольности кода и проблемам с единым стилем.

Выражение using структурно соответствует IDisposable

У компилятора C# интересное отношение к интерфейсам. Довольно часто вам не нужно на самом деле реализовывать абстрактный интерфейс для определенных фичей языка. Все, что вам нужно, так это просто реализовать в классе определенный публичный API, что по своей структуре повторяет абстрактный интерфейс.

Классическим примером этого является foreach и IEnumerable. Если класс обладает методом GetEnumerator, возвращающим значение свойства Current и методом MoveNext, тогда вы можете использовать foreach. Сами типы возвращаемых данных не имеют значения, что позволяет таким классам, как List<T>, реализовывать более быстрые перечисления. Этот подход достаточно часто называется структурным соответствием.

В рамках новой версии языка using также будет поддерживать структурное соответствие. На первый взгляд, это нововведение кажется лишенным смысла, так как мы вряд ли ожидаем увидеть класс для использования с using без реализации интерфейса IDisposable. Впрочем, мы упускаем такое нововведение как ref struct. Реализация интерфейса в данном случае невозможна, поэтому здесь нам на помощь приходит структурное соответствие.

Методы расширения с foreach и using

Как дополнение к предыдущему посту, теперь мы можем добавить GetEnumerator и Dispose в качестве методов расширения для работы с foreach и using соответственно. Опять же, здесь мы говорим об особенности, которая станет полезной в частном случае. К примеру, вы хотите добавить Dispose-расширение в COM-объект сторонней библиотеки (к примеру, дабы вызвать Marshal.ReleaseComObject).

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

Using неявной области видимости

На данный момент выражение using может быть использовано только в рамках явной области видимости (в скобках). Если данное нововведение будет принято на вооружение, теперь вы можете писать конструкции следующего вида:

Каждая из этих переменных будет автоматически очищена в конце текущей области видимости в реверсивном порядке. Функционально написанное выше эквивалентно этому, но гораздо более элегантно:

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

Возможный минус данного нововведения в том, что оно не совместимо с оператором goto.

Автор перевода: Евгений Лукашук

Источник

КОММЕНТАРИИ И ОБСУЖДЕНИЯ
СТАТЬИ ПО СХОЖЕЙ ТЕМАТИКЕ
ВИДЕО КУРСЫ ПО СХОЖЕЙ ТЕМАТИКЕ

ПОДПИСКА НА ITVDN ВЫГОДА ДО 29.95$ НА ОБУЧЕНИЕ ПРЕСТИЖНЫМ ПРОФЕССИЯМ!

1 месяц19.99$
подписка

легкий старт в обучении

3 месяца49.99$
подписка

выгода от подписки до9.98$

6 месяцев89.99$
подписка

выгода от подписки до29.95$