[英]Ref vs No Ref for self-modifying objects
如果在函数中修改了被引用为参数的对象,则是否使用ref无关紧要? 以下两个功能之间有区别吗?
void DisposeObject(ClassThing c)
{
c.Dispose();
}
void DisposeObject(ref ClassThing c)
{
c.Dispose();
}
它不取决于您的情况。
但:
如果使用ref关键字传递引用对象,则该方法位于方法内部,可以将引用更改为指向该类型的另一个Object(因此它将在方法外部可见)
根据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()
的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.