Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
47 of 1492 menu
◀ ▶

Модификатор scoped

Ключевое слово scoped перед ref в параметре говорит, что ссылку нельзя сохранять дольше текущего вызова - например, в поле класса. Так снижают риск висячих ссылок на стековые данные. Код остаётся без unsafe.

Синтаксис

void Метод(scoped ref тип имя)

Пример

Давайте выведем число через метод с scoped ref:

using System; class Program { static void Show(scoped ref int num) { Console.WriteLine(num); } static void Main() { int val = 7; Show(ref val); } }

Результат выполнения кода:

7

Пример

Давайте увеличим значение через scoped ref:

using System; class Program { static void Inc(scoped ref int num) { num++; } static void Main() { int val = 5; Inc(ref val); Console.WriteLine(val); } }

Результат выполнения кода:

6

Пример

Давайте прочитаем элемент массива через scoped ref:

using System; class Program { static void ShowCell(scoped ref int cell) { Console.WriteLine(cell); } static void Main() { int[] nums = {1, 2, 3, 4, 5}; ShowCell(ref nums[2]); } }

Результат выполнения кода:

3

Пример

Давайте сравним локальную переменную до и после вызова с scoped ref:

using System; class Program { static void Set(scoped ref int num, int value) { num = value; } static void Main() { int val = 1; Set(ref val, 12); Console.WriteLine(val); } }

Результат выполнения кода:

12

Смотрите также

  • модификатор ref,
    который передаёт переменную по ссылке
  • модификатор in,
    который передаёт ссылку только для чтения
  • модификатор out,
    который отдаёт значение через аргумент
  • оператор диапазона,
    который вырезает срез без копирования всего
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить