C# 中常說的「實值型別」究竟是什麼?是 Int16、Int32 這些數值型別嗎?透過 IL 反組譯探討其本質。
C# 所有型別 (包括結構) 最終繼承自 System.Object,從程式碼層面看「一切皆類別」。但 System.Int16、Int32、Boolean 等在 IL 中定義為 struct,並繼承 System.ValueType,而 ValueType 繼承 Object。
public struct CustomerStruct { public string Name { get; set; } }

IL 顯示 CustomerStruct 繼承 System.ValueType,驗證結構型別即實值型別。
Int32 a = new System.Int32(10);
CustomerStruct customer = new CustomerStruct();
new 配置記憶體:結構同為類別,可用 new。ValueType,是則配置於**堆疊**,否則配置於**受控堆積**並回傳參考。object o = new object();
Int32 aaa = 100;
o = aaa; // 發生裝箱
CLR 偵測 aaa 為實值型別 (堆疊),複製其值至受控堆積建立物件參考指向該副本,此即裝箱。
System.ValueType 的型別**。