ref struct
ref struct нельзя хранить в поле
обычного класса, упаковывать в object
и применять в async-методе.
Span<int> - тоже ref struct.
Локальная переменная такого типа допустима.
Строка object o = holder не компилируется -
в примерах её нет.
Синтаксис
ref struct Holder
{
public int X;
}
Пример
Давайте создать локальный Holder:
using System;
ref struct Holder
{
public int X;
}
class Program
{
static void Main()
{
Holder holder = new Holder { X = 1 };
int res = holder.X;
Console.WriteLine(res);
}
}
Результат выполнения кода:
1
Пример
Давайте изменить поле на стеке:
using System;
ref struct Holder
{
public int X;
}
class Program
{
static void Main()
{
Holder holder = new Holder { X = 12345 };
holder.X = 2;
Console.WriteLine(holder.X);
}
}
Результат выполнения кода:
2
Пример
Давайте передать значение в метод:
using System;
ref struct Holder
{
public int X;
}
class Program
{
static int Read(Holder holder)
{
return holder.X;
}
static void Main()
{
Holder holder = new Holder { X = 3 };
int res = Read(holder);
Console.WriteLine(res);
}
}
Результат выполнения кода:
3
Смотрите также
-
ref-поле,
только вref struct -
stackalloc,
буфер на стеке -
ref-возврат,
ссылка на живое место -
unsafe,
небезопасный код