在引用类型中定义的值类型是存储在堆上还是堆栈上?
答案 0 :(得分:3)
存储在堆栈中的唯一变量是函数的局部变量。对于引用类型,引用存储在堆栈中,而引用的对象存储在堆上。对于值类型,对象本身存储在堆栈中。请注意,可以从本地函数中转义的局部变量(例如通过闭包)存储在堆上的单独数据结构中,包括可能包含的任何值类型。
换句话说,由于引用类型总是存储在堆上,因此它们包含的任何内容(甚至是值类型)也都存储在堆上。
答案 1 :(得分:2)
答案 2 :(得分:1)
引自here:
每个局部变量(即一个声明的变量) 在方法中)存储在堆栈中。 这包括引用类型变量 - 变量本身在堆栈上,但要记住a的值 引用类型变量只是一个 引用(或null),而不是对象 本身。方法参数计为 局部变量也是如此,但如果是的话 用ref修饰符声明它们 不要得到自己的插槽,但分享一个 插槽中使用的变量 调用代码
我想像TextBox txtbx = new TextBox();
之类的东西意味着变量txtbx存在于堆栈中,但它的值通常是对堆上对象的引用。
引用类型的实例变量始终在堆上。这就是物体本身“存在”的地方。