序言
不是,比如下面三種情況:
1、引用型別內部的變數,即使是值型別,也會隨同引用型別的例項一起被分配在堆上。
2、對於值型別的陣列,由於陣列是引用型別,陣列內的值型別元素,也被分配在堆上。
3、對於閉包,如下:
Action<int> act = a =>
{
Console.WriteLine(a);
};
C# compiler 生成的IL 會新增一個靜態的輔助類,閉包內的區域性變數也會成為輔助類的成員變數,因此,這種值型別的區域性變數也被分配到堆上。
記住:值型別與引用型別的本質區別在於:值型別是“整體複製”,而引用型別是 “複製引用”。