1

如果作为参数引用的对象在函数中被修改,是否使用 ref 是否重要?以下两个函数有区别吗?

void DisposeObject(ClassThing c)
{
   c.Dispose();
}

void DisposeObject(ref ClassThing c)
{
   c.Dispose();
}
4

3 回答 3

6

没关系。重要的是,如果您将某些东西分配给c(并希望它反映在方法之外):

c = new ClassThing();

在这种情况下,你会使用ref.

于 2011-10-25T14:57:26.233 回答
1

它不取决于你的情况。

但:

如果您使用 ref 关键字传递引用对象,则您在方法内部有可能将引用更改为指向该类型的另一个对象(因此它将在方法外部可见)

于 2011-10-25T14:58:24.900 回答
0

根据传递引用类型参数的 MSDN 指南

当您通过值传递引用类型参数时,可以更改引用指向的数据,例如类成员的值。但是,您不能更改引用本身的值;也就是说,您不能使用相同的引用来为新类分配内存并让它在块之外持续存在。为此,请使用 ref 或 out 关键字传递参数。

因此,您可以更改原始对象,但不能更改原始对象以引用内存中的不同位置。例子:

static void Main()
{
    int[] integerArray = new int[8];
    foo(integerArray);
}

private void foo(int[] myArray)
{
    myArray[0] = 5;  //this changes integerArray
    myArray = new int[4]; //this does not change integerArray,
                          // ... but it would if you used ref or out
}

所以差异确实很重要,尽管我不具体了解Dispose().

于 2011-10-25T15:05:09.793 回答