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 ++中的指针一样,还是其他什么?
答案 0 :(得分:4)
你的第一个点不正确。
在堆栈上添加引用。然后,此引用引用堆上的内存。
(免责声明:以下声明是我认为它的工作方式......在SSCLI中肯定是这样的)
引用被实现为指针..但是没有正式的要求声明它们必须是指针。这可能会在微软自由裁量权的任何时候发生变化。它们(当前)指向对象的方法表。
对象如下所示:
+-------------+
| |
| Reference |
| |
+------+------+
|
| +-------------------------------+
| | Object header |
+--------------->|-------------------------------|
| |
| |
| |
| Method table |
| |
| |
| |
| |
+-------------------------------+
标头包含同步块索引和指向对象类型定义的指针。重要的是要知道,引用知道它们指向的是什么。指针不必知道这一点。这是由CLR强制执行的。
是的,这是一个您不必担心的实施细节..但我不认为知道它有任何问题。
只要您不依赖实施细节,了解它们就不会杀了你。