如何通过.NET中的引用传递类?

时间:2015-08-28 15:42:49

标签: c# .net pointers reference unsafe

众所周知,.NET中的类通过引用传递,并按值进行结构化。

在不安全的代码中,您可以指向结构,但不能指向类,因为它们是由GC移动的。例如,如果有指向数组的指针,则必须将其放在fixed语句中(如果在堆上分配)或stackalloc(在堆栈上分配)。

话虽如此,如果类被GC移动,如何通过引用传递类?

2 个答案:

答案 0 :(得分:3)

GC的举动; GC修复。由于GC必须找到对对象的所有引用(以查看它是否为GC),这是更改这些引用的一小步,指向新的地址。

答案 1 :(得分:1)

您可以将类类型实例视为句柄,然后对句柄的引用将只是方法调用的另一个间接(一种指向句柄的指针)范围有限。由于对象本身仍然隐藏在句柄后面,因此可以重新定位,而不会产生任何明显的效果。