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

C#中如何将this的指针传递给函数?(VS2022)

C#中传递当前类指针的正确方式

首先要明确:C#是托管语言,默认不允许直接操作对象指针——因为GC会随时移动托管对象的内存位置,直接取地址会导致指针失效。要实现你的需求,必须满足两个前提:开启unsafe编译支持,使用fixed关键字固定对象内存。

步骤1:开启项目的unsafe编译选项

在Visual Studio 2022中:

  • 右键你的项目 → 选择「属性」
  • 切换到「生成」标签页
  • 勾选「允许不安全代码」选项,保存设置

步骤2:修改代码实现指针传递

修改后的代码如下:

public class SomeClass
{
    // 标记方法为unsafe,允许内部的指针操作
    public unsafe void SomeClassFunction()
    {
        // 使用fixed关键字固定当前对象的内存,防止GC移动它
        fixed (SomeClass* ptr = &this)
        {
            SomeFunction(ptr);
        }
    }
}

// 同样需要标记方法为unsafe,因为参数是指针类型
public unsafe void SomeFunction(SomeClass* ptr)
{
    // 示例:通过指针访问类成员
    // ptr->SomeProperty = value;
    // 或者 (*ptr).SomeProperty = value;
}

关键说明

  • unsafe修饰符:必须加在包含指针操作的方法或代码块上,告诉编译器这里有非托管的指针操作。
  • fixed关键字:临时固定托管对象的内存地址,确保在fixed块执行期间,GC不会移动该对象,指针始终有效。
  • 替代方案:如果不是必须和非托管代码交互或做极端性能优化,C#里更推荐直接传递对象引用(把SomeFunction的参数改成SomeClass obj,调用时传this),这更符合托管代码的设计习惯,也避免了unsafe代码的风险。

内容的提问来源于stack exchange,提问作者Runsva

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:30:06