ref-поле
ref-поле живёт только внутри
ref struct.
Через него можно менять исходную переменную
на стеке. Не возвращайте ref struct
с ref-полем на локальную переменную
метода - кадр уничтожится.
Синтаксис
ref struct Box
{
public ref int Value;
public Box(ref int value) { Value = ref value; }
}
Пример
Давайте изменить x через Box:
using System;
ref struct Box
{
public ref int Value;
public Box(ref int value)
{
Value = ref value;
}
}
class Program
{
static void Main()
{
int x = 1;
Box box = new Box(ref x);
box.Value = 9;
Console.WriteLine(x);
}
}
Результат выполнения кода:
9
Пример
Давайте прочитать через ref-поле:
using System;
ref struct Box
{
public ref int Value;
public Box(ref int value)
{
Value = ref value;
}
}
class Program
{
static void Main()
{
int x = 12345;
Box box = new Box(ref x);
int res = box.Value;
Console.WriteLine(res);
}
}
Результат выполнения кода:
12345
Пример
Давайте проверить связь после второго присваивания:
using System;
ref struct Box
{
public ref int Value;
public Box(ref int value)
{
Value = ref value;
}
}
class Program
{
static void Main()
{
int x = 1;
Box box = new Box(ref x);
box.Value = 2;
Console.WriteLine(box.Value);
}
}
Результат выполнения кода:
2
Смотрите также
-
ref struct,
контейнерref-поля -
ref-возврат,
другой способ ссылки -
ref readonly,
ссылка только на чтение -
stackalloc,
данные на стеке