众所周知,.NET中的类通过引用传递,并按值进行结构化。
在不安全的代码中,您可以指向结构,但不能指向类,因为它们是由GC移动的。例如,如果有指向数组的指针,则必须将其放在fixed
语句中(如果在堆上分配)或stackalloc
(在堆栈上分配)。
话虽如此,如果类被GC移动,如何通过引用传递类?
答案 0 :(得分:3)
GC的举动; GC修复。由于GC必须找到对对象的所有引用(以查看它是否为GC),这是更改这些引用的一小步,指向新的地址。
答案 1 :(得分:1)
您可以将类类型实例视为句柄,然后对句柄的引用将只是方法调用的另一个间接(一种指向句柄的指针)范围有限。由于对象本身仍然隐藏在句柄后面,因此可以重新定位,而不会产生任何明显的效果。