Repository navigation
RU CSharp Memory Unsafe
Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어
Span<T> и ReadOnlySpan<T> дают представление над памятью без обязательного копирования. ref-возврат и ref-локальная переменная позволяют работать с существующим местом хранения. Компилятор контролирует время жизни ссылок. ref struct не может использоваться как обычное heap-поле; ограничения около await и yield зависят от допустимого времени жизни.
Сохраните этот пример отдельно как Example.cs. Запускайте его независимо от остальных примеров страницы.
Example.cs:
// PROJECT-EXAMPLE
System.Span<int> values = stackalloc int[] { 2, 3 };
System.Console.WriteLine(values[0] + values[1]);Результат:
5
static int SumSmall()
{
Span<int> values = stackalloc int[] { 1, 2, 3 };
int total = 0;
foreach (int value in values) total += value;
return total;
}
UO.Print(SumSmall().ToString());unsafe разрешает указатели и функции работы с памятью, если компиляция включает AllowUnsafeBlocks. fixed удерживает адрес перемещаемого объекта на нужный участок. Это стандартные возможности C#, а не способ обойти правила владения игровым миром.
// PROJECT-EXAMPLE
namespace UserTools;
public static class PointerExample
{
public static unsafe int ReadLocal()
{
int value = 42;
int* address = &value;
return *address;
}
}Официальная документация: Память: ref, Span, ref struct и unsafe — Microsoft Learn.
ClassicUO — Bad Newbie & C# Scripts IDE