Всего месяц назад я писал про новые возможности языка 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 немного, но, надеюсь, они будут полезны.
Приятного программирования.