参考类型如何在内部工作?

时间:2014-01-01 10:02:04

标签: c#

public class ReferenceType
{
   public int FName { get; set; }        
   public int LName { get; set; }        
}  

ReferenceType rt1;          //Line 6
rt1 = new ReferenceType();   //Line 7 >>have just split a single line statement<<

众所周知

参考类型的工作原理,在上面的代码场景中

  • rt1在堆栈中分配一部分内存,以便将来保留some对象的引用(第6行)

  • rt1被分配了在堆[a specific]上创建的对象的引用

现在,这个引用究竟是什么内部的,rt1是否包含(创建的)对象的地址,十六进制,就像c ++中的指针一样,还是其他什么?

1 个答案:

答案 0 :(得分:4)

你的第一个点不正确。

在堆栈上添加引用。然后,此引用引用堆上的内存。

(免责声明:以下声明是我认为它的工作方式......在SSCLI中肯定是这样的)

引用被实现为指针..但是没有正式的要求声明它们必须是指针。这可能会在微软自由裁量权的任何时候发生变化。它们(当前)指向对象的方法表。

对象如下所示:

       +-------------+
       |             |
       |  Reference  |
       |             |
       +------+------+
              |
              |                +-------------------------------+
              |                |          Object header        |
              +--------------->|-------------------------------|
                               |                               |
                               |                               |
                               |                               |
                               |           Method table        |
                               |                               |
                               |                               |
                               |                               |
                               |                               |
                               +-------------------------------+

标头包含同步块索引和指向对象类型定义的指针。重要的是要知道,引用知道它们指向的是什么。指针不必知道这一点。这是由CLR强制执行的。

是的,这是一个您不必担心的实施细节..但我不认为知道它有任何问题。

只要您不依赖实施细节,了解它们就不会杀了你。