可以在堆栈上分配引用类型吗?

时间:2014-08-18 12:03:19

标签: c# stack heap value-type reference-type

请考虑以下代码:

class Point
{
   public int position;
}

此处 int position 将在堆上分配,即使它是值类型。

但我的问题是相反的情况,请考虑以下代码:

struct Person
{
   public string name;
}

这会在堆或堆栈上分配字符串名称吗?

TIA

2 个答案:

答案 0 :(得分:0)

没有。在分配Person的地方将分配对字符串的引用。字符串本身将在堆上分配。事实上,每次你说新的T,其中T是一个类,对象将在堆上分配。

答案 1 :(得分:0)

引用类型实际实例对象在堆上分配,引用它的引用变量在堆栈上分配。

就像脑筋急转弯一样: 当我们将值类型转换为引用类型时,例如对象(一切都是.net中的对象)或接口(引用类型)它正在实现然后值类型被加框,意味着复制到堆并且它被引用从堆栈。 如果我们将对象强制转换为值类型,则将其取消装箱回到值类型并完全复制到堆栈。 有些人倾向于错误地将此场景视为在堆上分配的引用类型。