c# - 显示对象引用的值

标签 c# .net vb.net memory-management

在 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/

相关文章:

mysql - 如何使用 vb.net 对 MySQL 中的行进行预随机化

c# - 在 RavenDB 中查询动态属性

c# - 在 C# 中解码 PCX 图像以显示为位图

c# - 为什么我不能用 Mono 的 Evaluator 编译 LINQ 语句?

c# - 格式化规则在类成员声明之间有空行

c# - 用Resharper重构,引入了bug,为什么?

执行 Postgresql 存储过程时出现 VB.NET 错误

database - 从数据库中检索数据的多项选择测验 - 如何使数据库中的值进入随机单选按钮?

c# - 在每次迭代中有条件地使用不同数量的项目

c# - "LINQ to Entities does not recognize the method ' Int32 Parse(System.String)' 的解决方法