Eri*_*ert 10
是否有可能检查每种变量以查看值或实际参考本身?
只是为了澄清,则值 a的引用类型的变量 是一个参考.参考是值.
引用是一种值,就像int是一种值.与int不同,引用是一个只能复制和解除引用的值 ; 您无法直接在C#中观察其值,因为它的值是垃圾收集器的实现细节.
引用是否存储为某种编码值?
对,就是这样.实际上,引用是32位或64位整数(取决于您是在32位还是64位进程中),它是指向垃圾收集器已知的某些结构的指针,该结构与引用对象的数据相关联.
如果要直接查看引用,则执行此操作的工具是调试器.将C#代码加载到调试器中,编译它,运行它,命中断点,然后查看堆栈状态和寄存器.稍微聪明一点,您应该能够找出哪些堆栈位置和寄存器对应于哪些局部变量.与值类型的局部变量对应的位置将包含值; 那些引用类型将包含看起来像指针的值.如果检查内存窗口中的那些指针,那么您将查看由垃圾收集器维护的描述对象内容的结构.
这可能是Jon Skeet的一个,但我可能有不同的角度:
不要过分担心这些东西如何在记忆中表现出来.除非你已经阅读了整个语言规范 - 无论如何谁都这样做? - 你真的不需要知道.真.不要忘记记住哪些数据存储在哪里 - 这可能是特定于实现的.
相反,认为语义,例如,传递给函数的值类型的条款复制,而引用类型的引用.类似的东西.
你真的不想知道类型的声明实际上是什么.相信我.你想知道的是它的行为方式.