如果作为参数引用的对象在函数中被修改,是否使用 ref 是否重要?以下两个函数有区别吗?
void DisposeObject(ClassThing c)
{
c.Dispose();
}
void DisposeObject(ref ClassThing c)
{
c.Dispose();
}
如果作为参数引用的对象在函数中被修改,是否使用 ref 是否重要?以下两个函数有区别吗?
void DisposeObject(ClassThing c)
{
c.Dispose();
}
void DisposeObject(ref ClassThing c)
{
c.Dispose();
}
它不取决于你的情况。
但:
如果您使用 ref 关键字传递引用对象,则您在方法内部有可能将引用更改为指向该类型的另一个对象(因此它将在方法外部可见)
当您通过值传递引用类型参数时,可以更改引用指向的数据,例如类成员的值。但是,您不能更改引用本身的值;也就是说,您不能使用相同的引用来为新类分配内存并让它在块之外持续存在。为此,请使用 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()
.