在.NET中,对象引用的具体类型是什么?

Chr*_*ger 5 .net clr reference

即存储在堆栈上的值类型数据结构的名称是什么,它引用堆上的对象?

即对象引用是System.What(如果有的话)?

我知道这不是指针,不是吗?

我知道它"像"一个指针.

我知道它是"垃圾收集器所有".

我非常相信当你实例化一个对象(即一个引用类型)时,IL会给CLR指令以在内存中分配"堆栈引用/堆值对"(例如

...
      .locals init ([0] int32 i1,
               [1] object o1,
               [2] int64 l1)
      IL_0000:  nop
      IL_0001:  ldc.i4.4
      IL_0002:  stloc.0
      IL_0003:  newobj     instance void [mscorlib]System.Object::.ctor()
      IL_0008:  stloc.1
      IL_0009:  ldloc.0
      IL_000a:  box        [mscorlib]System.Int32
...
Run Code Online (Sandbox Code Playgroud)

),并且在语言或IL级别上无法访问实际引用(复制/分配给新引用或操作引用对象除外),并且CLR/CLI和CLR创建和管理对象引用的分配将OBJECTREF DWORD值注入堆栈(或类似).

请让我直截了当,并为所有图书作者和谷歌搜索结束这一点.

谢谢!

Oli*_*let 2

它是一个指针,其大小与本机字长相同(即 x86 上的 32 位指针,x64 上的 64 位指针)。我认为它没有 CTS 暴露的“类型”。