Skip to content

ZH TW CSharp Memory Unsafe

Codex edited this page Oct 11, 2026 · 2 revisions

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

記憶體:ref、Span、ref struct 和 unsafe

手冊C# · 範例UO

Span<T> 和 ReadOnlySpan<T> 提供記憶體視圖,而無需複製。 ref-返回和ref-局部變數可讓您使用現有的儲存位置。編譯器控制引用的生命週期。 ref struct不能用作常規堆字段; await 和 yield 周圍的限制取決於允許的壽命。

簡單範例 (Example.cs)

請將此範例另存為 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());

如果編譯包含AllowUnsafeBlocks,則unsafe啟用指標和記憶體函數。 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學習。

Clone this wiki locally