如果在函数中修改了作为参数引用的对象,那么使用ref是否重要?以下两个函数之间有区别吗?
void DisposeObject(ClassThing c)
{
c.Dispose();
}
void DisposeObject(ref ClassThing c)
{
c.Dispose();
}
答案 0 :(得分:6)
答案 1 :(得分:1)
它不依赖于你的情况。
<强> BUT:强>
如果你传递一个带有ref关键字的引用对象,你可以在方法内部更改引用,指向另一个此类型的对象(因此它将在方法之外可见)
答案 2 :(得分:0)
根据the MSDN guide to passing reference-type parameters:
按值传递reference-type参数时,可以更改引用指向的数据,例如类成员的值。但是,您无法更改引用本身的值;也就是说,您不能使用相同的引用为新类分配内存并使其在块外保留。为此,请使用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()
的行为。