自修改对象的Ref vs No Ref
本文关键字:Ref vs No 修改 对象 | 更新日期: 2023-09-27 18:12:34
如果作为参数引用的对象在函数中被修改,是否使用ref重要吗?以下两个函数有区别吗?
void DisposeObject(ClassThing c)
{
c.Dispose();
}
void DisposeObject(ref ClassThing c)
{
c.Dispose();
}
没关系。重要的是,如果您将某些内容分配给c
(并希望它在方法外部反映):
c = new ClassThing();
在这种情况下,您将使用ref
这并不取决于你的情况。
但是:
如果你用ref关键字传递一个引用对象,那么你在方法内部就有可能将引用更改为指向该类型的另一个对象(因此它将在方法外部可见)
根据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()
的具体行为