Модификатор 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