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

C# 型別系統核心:值型別與參考型別的記憶體行為差異

     編輯:關於C#

一、型別分類與記憶體模型

C# 型別系統劃分為兩大陣營:

  • 值型別:直接儲存資料本身,配置於 堆疊,生命週期隨作用域自動釋放。
  • 參考型別:儲存記憶體位址(指標),實際物件配置於 受控堆積,由 GC 回收。

值型別語意:逐份複製

int i = 10;
int j = i;  // j 獲得獨立副本
j = 20;     // i 仍為 10

記憶體中存在兩個獨立的 10,互不干擾。

參考型別語意:共享引用

Vector x = new Vector(); // 假設 Vector 為 class
x.Value = 20;
Vector y = x;            // y 指向同一物件
y.Value = 50;
Console.WriteLine(x.Value); // 輸出 50!

x 與 y 指向同一堆積物件,修改任一者均影響另一者。參考型別可指派 null 表示不指向任何物件。

二、CTS 統一型別系統

C# 預定義型別並非語言內建,而是對應 .NET 執行期型別:

  • int → System.Int32
  • double → System.Double
  • bool → System.Boolean

這意味著所有基礎型別皆為結構/類別,擁有方法(如 int.MaxValue、ToString()),實現了「一切皆物件」的統一性。

三、預定義值型別速查表

整數家族

型別位元範圍CLR 對應
sbyte8-128 ~ 127System.SByte
byte80 ~ 255System.Byte
short16-32,768 ~ 32,767System.Int16
ushort160 ~ 65,535System.UInt16
int32-2,147,483,648 ~ 2,147,483,647System.Int32
uint320 ~ 4,294,967,295System.UInt32
long64-2^63 ~ 2^63-1System.Int64
ulong640 ~ 2^64-1System.UInt64

浮點與精確十進位

  • float (32-bit, ~7 位有效數字) —— 字面值加 f 後綴:3.14f
  • double (64-bit, ~15 位) —— 預設浮點字面值型別
  • decimal (128-bit, 28-29 位) —— 財務計算首選,字面值加 m:19.99m

布林與字元

  • bool:true/false
  • char:單一 Unicode 字元 (16-bit),單引號括起:'中';雙引號為字串 "中"

四、預定義參考型別

object:萬物基類

所有型別隱含繼承 System.Object,提供 Equals()、GetHashCode()、GetType() 等虛擬方法,可覆寫實現自訂相等邏輯。

string:不可變參考型別

string 雖為參考型別,但語意上表現為不可變值型別:

string s1 = "GoSoA";
string s2 = s1;      // 共用同一字串物件
s1 = "www.GoSoA";    // s1 指向新物件,s2 仍指向原物件
// 輸出:s1=www.GoSoA, s2=GoSoA

修改字串實為建立新物件,原物件不變,這是為了執行緒安全與字串駐留優化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved