You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#类中添加指针作为字段?附错误实现示例

在C#类中使用指针字段的正确方法

要在C#类中定义指针字段,你不能用unsafe块包裹成员声明——这是语法错误。正确的做法是将整个类标记为unsafe,指针字段本身必须在unsafe上下文中声明,标记类为unsafe是最直接的方式。

步骤1:启用项目的unsafe编译支持

首先要确保你的项目允许unsafe代码:

  • 右键项目 → 属性 → 生成 → 勾选“允许unsafe代码”选项。

步骤2:正确的类结构示例

// 标记类为unsafe,类内即可合法声明指针字段
public unsafe class PointerExample
{
    // 直接声明指针类型的字段
    private int* pointerField;

    // 示例:给指针赋值的方法
    public void SetPointer(int* target)
    {
        pointerField = target;
    }

    // 示例:修改指针指向的内存值
    public void UpdateValue(int newValue)
    {
        if (pointerField != null)
        {
            *pointerField = newValue;
        }
    }

    // 示例:读取指针指向的内存值
    public int GetValue()
    {
        return pointerField != null ? *pointerField : 0;
    }
}

步骤3:外部调用类的unsafe代码

在类外部调用涉及指针的方法时,需要将调用代码放在unsafe块中:

class Program
{
    static unsafe void Main()
    {
        int localValue = 10;
        PointerExample example = new PointerExample();
        
        // 将局部变量的地址传递给类的指针字段
        example.SetPointer(&localValue);
        example.UpdateValue(20);
        
        Console.WriteLine(localValue); // 输出20
        Console.WriteLine(example.GetValue()); // 输出20
    }
}

关键注意事项

  • 避免悬空指针:务必确保指针指向的内存始终有效,不要让指针指向已被释放的堆内存或已超出作用域的栈内存,否则会触发内存访问错误。
  • 性能与风险平衡:指针操作确实能减少托管内存的GC开销,但属于非托管操作,没有CLR的内存安全保障,只有在极致性能需求的场景才建议使用。
  • 指针字段的初始化:指针默认值为null,使用前一定要检查是否为空,避免空引用异常。

内容的提问来源于stack exchange,提问作者Ai-Nerd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:27:25