首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 深度解析「實值型別」本質

     編輯:關於C語言

C# 中常說的「實值型別」究竟是什麼?是 Int16、Int32 這些數值型別嗎?透過 IL 反組譯探討其本質。

所有型別皆繼承自 System.Object

C# 所有型別 (包括結構) 最終繼承自 System.Object,從程式碼層面看「一切皆類別」。但 System.Int16、Int32、Boolean 等在 IL 中定義為 struct,並繼承 System.ValueType,而 ValueType 繼承 Object。

IL 驗證

public struct CustomerStruct { public string Name { get; set; } }

IL 反組譯結果

IL 顯示 CustomerStruct 繼承 System.ValueType,驗證結構型別即實值型別。

CLR 特殊處理機制

Int32 a = new System.Int32(10);
CustomerStruct customer = new CustomerStruct();
  • new 配置記憶體:結構同為類別,可用 new。
  • CLR 透過反射檢測型別是否繼承 ValueType,是則配置於**堆疊**,否則配置於**受控堆積**並回傳參考。

裝箱操作本質

object o = new object();
Int32 aaa = 100;
o = aaa; // 發生裝箱

CLR 偵測 aaa 為實值型別 (堆疊),複製其值至受控堆積建立物件參考指向該副本,此即裝箱。

結論

  1. 程式碼層面:所有型別皆為類別 (參考語意)。
  2. 「實值型別」≠ 數值型別,而是**所有繼承 System.ValueType 的型別**。
  3. CLR 提供語言層級支援,自動處理實值型別的堆疊配置、裝箱/拆箱。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved