可能重复:
通过引用和.net垃圾回收的C#参数
我在考虑使用ref参数来限制数组的边界检查.例如,交换两个元素的代码是:
class Test {
int[] array;
private void qSort() {
...blah...
int temp = array[a];
array[a] = array[b];
array[b] = temp;
}
}
Run Code Online (Sandbox Code Playgroud)
它具有4个访问阵列的替代方案:
class Test {
int[] array;
private void qSort() {
...blah...
Swap( ref array[a], ref array[b] );
}
static void Swap(ref int a,ref int b) {
int temp = a;
a=b;
GC.Collect(); // suppose this happens
b=temp;
}
}
Run Code Online (Sandbox Code Playgroud)
理论上只有2个访问数组
令我困惑的是,当我通过ref传递数组元素时,我不知道到底发生了什么.如果Garbage Collector启动,在Swap函数中执行代码时,是否能够移动数组?或者在呼叫期间固定阵列?
请注意,上面的代码是一个简单的测试用例.我想在更复杂的场景中使用它
编辑:正如BrokenGlass指出的那样,Eric Lippert在这里通过引用和.net垃圾收集来回答C#参数
数组不会被固定,GCollector可以移动它,并且会根据堆栈中的元素更新任何引用.
归档时间: |
|
查看次数: |
4601 次 |
最近记录: |