С# 7.3, появившийся с очередным обновлением Visual Studio 2017 (версия 15.7), содержит нововведения не только для управляемого кода. Разработчики не оставили в стороне и неуправляемый код. Для него добавились следующие возможности языка: |
Инициализатор stackalloc
Экземпляр типа Span<T> теперь можно инициализировать с помощью stackalloc по аналогии с массивами.
Span<int> x = stackalloc[] { 1, 2, 3 };
Повторное присвоение ссылочной переменной ref
В С# 7.3 появилась возможность изменить цель ссылочной переменной, связав ее с другой переменной. Например:
int x1 = 5;
int x2 = 6;
ref var ptr = ref x1;
// Изменим цель ссылочной переменной
ptr = ref x2; // Доступно только в C# 7.3 и выше
Использование fixed для работы с типами
Шаблон fixed используется в небезопасном (unsafe) коде для получения ссылки на управляемый буфер. При этом гарантируется, что в зоне действия fixed буфер не будет перемещен или уничтожен сборщиком мусора.
Изначально fixed мог быть использован только с массивами неуправляемых объектов и типом string. C# 7.3 расширяет этот список и позволяет использовать ImmutableArray<T>, Span<T>, Utf8String. Кроме того улучшена поддержка string.
Индексирование перемещаемых буферов фиксированного размера
Индексирование буферов фиксированного размера теперь доступно без предварительного закрепления.