繁体   English   中英

Ref与No Ref进行自我修改的对象

[英]Ref vs No Ref for self-modifying objects

如果在函数中修改了被引用为参数的对象,则是否使用ref无关紧要? 以下两个功能之间有区别吗?

void DisposeObject(ClassThing c)
{
   c.Dispose();
}

void DisposeObject(ref ClassThing c)
{
   c.Dispose();
}

没关系 重要的是,如果要为c分配某些东西(并希望将其反映在方法之外):

c = new ClassThing();

在这种情况下,您将使用ref

它不取决于您的情况。

但:

如果使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM