C#将类成员作为ref参数传递

时间:2017-01-08 02:39:48

标签: c# ref

我不明白为什么可以将类实例成员作为ref参数传递给函数。

当函数执行时,可以通过垃圾收集移动对象,使引用无效。

然而,这似乎是允许和有效的。这是否意味着“ref”参数不仅仅是引擎盖下的原生指针?

class A
{
    public int Value;
}

class Test
{
    static void F(ref int value)
    {
        value = 7;
    }

    static void Main()
    {
        A obj = new A();
        // obj can be moved by GC, so "ref obj.Value" cannot be a native pointer under the hood
        F(ref obj.Value);  
        System.Console.WriteLine(obj.Value);  // Prints 7
    }
}

1 个答案:

答案 0 :(得分:3)

  

是否意味着" ref"参数不仅仅是引擎盖下的原生指针吗?

是的,这正是它的含义。如果它只是一个指针,他们称之为指针而不是引用。相反,对于引用,GC知道原始对象并正确跟踪事物,因此引用保留在对象中,并且在方法退出之前不会收集对象。