请考虑以下代码:
class Point
{
public int position;
}
此处 int position 将在堆上分配,即使它是值类型。
但我的问题是相反的情况,请考虑以下代码:
struct Person
{
public string name;
}
这会在堆或堆栈上分配字符串名称吗?
TIA
答案 0 :(得分:0)
没有。在分配Person的地方将分配对字符串的引用。字符串本身将在堆上分配。事实上,每次你说新的T,其中T是一个类,对象将在堆上分配。
答案 1 :(得分:0)
引用类型实际实例对象在堆上分配,引用它的引用变量在堆栈上分配。
就像脑筋急转弯一样: 当我们将值类型转换为引用类型时,例如对象(一切都是.net中的对象)或接口(引用类型)它正在实现然后值类型被加框,意味着复制到堆并且它被引用从堆栈。 如果我们将对象强制转换为值类型,则将其取消装箱回到值类型并完全复制到堆栈。 有些人倾向于错误地将此场景视为在堆上分配的引用类型。