我正在阅读Jeffrey Richter的CLR via C#,在其中他说通过ref参数传递的引用本身是按值传递的。这对我来说很有意义,也类似于指针。
例如,在C中,如果我将指针传递到函数中,然后通过malloc分配指针,它会将指针更改为指向新的内存位置,但我知道由于指针本身是副本,它不会重新分配传入函数的原始指针。为了在函数外部实现对指针的更改,我必须使用双重指针。
然而,在C#中:
例如,在C中,如果我将指针传递到函数中,然后通过malloc分配指针,它会将指针更改为指向新的内存位置,但我知道由于指针本身是副本,它不会重新分配传入函数的原始指针。为了在函数外部实现对指针的更改,我必须使用双重指针。
然而,在C#中:
void Swap(ref Object a, ref Object b)
{
Object t = b;
b = a;
a =t ;
}
这表明参考并不是按值传递的,这说明作品。类比上面的malloc,我假设我可以通过引用传递一个对象,并为其分配一个新对象,然后重新赋值将在函数外持续存在。
有人能解决我的困惑吗?