如果在函数中修改被引用为参数的对象,使用ref与否有关系吗?以下两个函数之间有区别吗?
void DisposeObject(ClassThing c)
{
c.Dispose();
}
void DisposeObject(ref ClassThing c)
{
c.Dispose();
}发布于 2011-10-25 22:58:25
这并不取决于你的情况。
但是:
如果使用ref关键字传递引用对象,则可以在方法内部更改引用以指向此类型的另一个对象(因此它将在方法外部可见)
发布于 2011-10-25 22:57:26
无所谓。重要的是,如果你要给c赋值(并希望它反映在方法之外):
c = new ClassThing();在这种情况下,您将使用ref。
发布于 2011-10-25 23:05:10
根据the MSDN guide to passing reference-type parameters的说法
通过值传递引用类型参数时,可以更改引用指向的数据,例如类成员的值。但是,您不能更改引用本身的值;也就是说,您不能使用同一引用为新类分配内存,并使其在块之外持久化。为此,使用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()的行为。
https://stackoverflow.com/questions/7891217
复制相似问题