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

Всего месяц назад я писал про новые возможности языка C#, добавленные в версии 7.1. А уже сейчас стала доступна новая версия 7.1. Изменений не очень много, но думаю, будет интересно узнать, что нового в этой версии.

Чтобы включить поддержку версии 7.2 перейдите в настройки проекта, зайдите в раздел "Build", затем "Advanced" и в "Language version" выберете 7.2:

Нижнее подчеркивание в цифровых литералах

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

var x = 0b_100_0000;

В версии 7.2 подобное использование стало доступным.

private protected

Появился новый модификатор доступа private protected, который даёт доступ внутри самого класса и для наследников, расположенных в той же сборке. Можно использовать варианты private protected и protected private.

Именованные аргументы

Именованные аргументы сейчас можно использовать в любом месте из списка аргументов. При условии, что они расположены на корректных позициях. Например:

void PrintValues(string name, string value, string description, int price)
{
	//
}
PrintValues(name: "Andrei", value: "Ami", "Description for print", price: 789);
PrintValues("Andrei", "Ami", description: "Description for print", 789);

Семантика ссылочных(reference) типов при использовании значимых(value) типов

  • in — указывает, что аргумент передаётся по ссылке, но запрещает изменять его вызываемым методом.
  • ref readonly — указывает, что значение возвращается по ссылке, но запрещает его менять. Для работы будет создана копия объекта.
  • readonly struct — позволяет определить неизменяемую структуру. При наличии изменяемых полей или свойств будет обработана как ошибка.
  • ref struct — определяет структуру, которая будет обращаться к управляемой памяти напрямую, всегда будет расположена в стеке. Создание её в куче запрещает.

Помеченная таким образом структура не сможет изменяться в итераторах, не сможет быть захвачена лямбда-выражением, не может быть упакована(boxing), не может использоваться в качестве членов обычной стуктуры/класса.

Изменений в версии 7.2 немного, но, надеюсь, они будут полезны.

Приятного программирования.

Добавить комментарий