首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自修改对象的Ref与No Ref

自修改对象的Ref与No Ref
EN

Stack Overflow用户
提问于 2011-10-25 22:53:54
回答 3查看 137关注 0票数 1

如果在函数中修改被引用为参数的对象,使用ref与否有关系吗?以下两个函数之间有区别吗?

代码语言:javascript
复制
void DisposeObject(ClassThing c)
{
   c.Dispose();
}

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

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-25 22:58:25

这并不取决于你的情况。

但是:

如果使用ref关键字传递引用对象,则可以在方法内部更改引用以指向此类型的另一个对象(因此它将在方法外部可见)

票数 1
EN

Stack Overflow用户

发布于 2011-10-25 22:57:26

无所谓。重要的是,如果你要给c赋值(并希望它反映在方法之外):

代码语言:javascript
复制
c = new ClassThing();

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

票数 6
EN

Stack Overflow用户

发布于 2011-10-25 23:05:10

根据the MSDN guide to passing reference-type parameters的说法

通过值传递引用类型参数时,可以更改引用指向的数据,例如类成员的值。但是,您不能更改引用本身的值;也就是说,您不能使用同一引用为新类分配内存,并使其在块之外持久化。为此,使用ref或out关键字传递参数。

因此,您可以更改原始对象,但不能更改原始对象以引用内存中的其他位置。示例:

代码语言:javascript
复制
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()的行为。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7891217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档