首页 新闻 会员 周边 捐助

c#获取类的内存地址

0
悬赏园豆:80 [已解决问题] 解决于 2012-10-26 15:32
 1 class Test
 2 {
 3     int a;
 4     string b;
 5     public Test(int a,string b)
 6     {
 7         this.a=a;
 8         this.b=b;
 9     }
10 }

通过unsafe或GCHandle可以查到字符串,整数,数组等的内存地址
Test t1=new Test();
这里如果如何获取t1的内存地址??

求解

C#
wind2013的主页 wind2013 | 初学一级 | 园豆:63
提问于:2012-10-26 11:34
< >
分享
最佳答案
0

答案可能让你失望,c#是不能获取内存地址的,就算获取到了也没什么意义,因为一个对象在内存的地址会变化的。

 

 

当你在unsafe的情况下,可以把内存pin在一定的地址防止回收,只有这样获取的地址才有意义。

GCHandle可以转化成IntPtr指针。

收获园豆:60
Ethan轻叹 | 小虾三级 |园豆:996 | 2012-10-26 13:04
其他回答(3)
0

本来这些获取到也没有什么意思的

收获园豆:10
chenping2008 | 园豆:9836 (大侠五级) | 2012-10-26 13:17
0

一楼可能正解……

收获园豆:10
ms_water | 园豆:510 (小虾三级) | 2012-10-26 15:25
1

虽然可以获取,但是不建议这样做。而且就算你获取到了,你也做不了太多的事。

C#的指针用途非常有限,值类型可以用指针来操作,但引用类型就不行了。

以下是代码:

using System.Runtime.InteropServices;
 using System;
 namespace ConsolePrototype
 {
     public class A
     {
     }
 
     class Program
     {
         static void Main(string[] args)
         {
 
             A a = new A();
             GCHandle hander = GCHandle.Alloc(a);
             var pin = GCHandle.ToIntPtr(hander);
 
             Console.WriteLine(pin);
         }
     }
 }
方外老和尚 | 园豆:361 (菜鸟二级) | 2012-10-26 16:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册