【发布时间】:2013-05-02 12:40:02
【问题描述】:
如果我通过引用函数传递数据成员,并且在该函数运行时,垃圾收集器开始运行并将包含该数据成员的对象移动到内存中会发生什么?
class SomeClass
{
int someDataMember;
void someMethod()
{
SomeClass.someFunction(ref someDataMember);
}
static void someFunction(ref int i)
{
i = 42;
int[] dummy = new int[1234567890];
// suppose the Garbage Collector kicks in here
i = 97;
}
}
CLR 如何确保引用参数在垃圾收集期间不会变为无效?它们是否像类引用一样调整?
【问题讨论】:
-
Eric Lippert 对@rightfold 的链接问题的回答完美地回答了这个问题。
-
它们被调整了,因为任何方法参数都被认为是一个根,所有的根都被调整(它在“CLR via C#”一书中说)
标签: c# garbage-collection clr pass-by-reference