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

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

Параметр ref принимает ссылку на уже существующую переменную. В объявлении метода и в вызове перед аргументом пишут ключевое слово ref. Переменная должна быть инициализирована до передачи - в отличие от out.

Синтаксис

void Метод(ref тип имя) Метод(ref переменная);

Пример

Давайте увеличим число на единицу внутри метода:

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

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

6

Пример

Давайте обменяем два числа через ref:

using System; class Program { static void Swap(ref int left, ref int right) { int temp = left; left = right; right = temp; } static void Main() { int a = 1; int b = 2; Swap(ref a, ref b); Console.WriteLine($"{a} {b}"); } }

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

2 1

Пример

Давайте изменим элемент массива по ref на ячейку:

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

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

10

Пример

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

using System; struct Counter { public int Value; } class Program { static void Double(ref int num) { num *= 2; } static void Main() { var counter = new Counter { Value = 3 }; Double(ref counter.Value); Console.WriteLine(counter.Value); } }

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

6

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

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