在 C++ 中,显示指向对象的指针的实际值相当简单。例如:
void* p = new CSomething();
cout << p;
有没有办法在 .NET 中做这样的事情?
这样做的值(value)将/只能是教育性的,例如出于演示的目的,例如为学生展示一个值,而不是仅仅比较引用相等性或 null(无)以证明浅拷贝、不变性等。
最佳答案
您可以使用 GCHandle
获取固定对象的地址。 GC 可以四处移动对象,因此要获取的唯一合理地址是固定对象之一。
GCHandle handle = GCHandle.Alloc(obj, GCHandleType.Pinned);
Console.WriteLine(handle.AddrOfPinnedObject().ToInt32());
handle.Free();
请记住,GCHandle
只会固定原始或 blittable 类型的对象。有些对象是 blittable 的(你可以为演示目的设置它,这样它就可以工作)但是任何引用类型都不是 blittable 的。
您需要使用 [StructLayout(LayoutKind.Sequential)]
添加明确的 blittable 描述,或使用调试器直接检查不符合这些条件的对象地址。
关于c# - 显示对象引用的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3355801/