C++ 追求底層控制(記憶體位置、物件生命週期);C# 採用受控環境:
destructor),改由垃圾回收器(GC)非決定性回收。int = System.Int32),確保跨語言互操作一致性。int、struct、enum。傳遞參數時複製「值」,儲存於堆疊(除非被裝箱)。class、delegate、array。變數儲存堆積物件的參考(位址),傳遞參數時複製「參考」。struct Point { public int X, Y; }
class Wrapper { public Point P; }
Point p1 = new Point(1,2);
Point p2 = p1; // 複製值,p2 獨立於 p1
p2.X = 99; // p1.X 仍為 1
Wrapper w1 = new Wrapper { P = new Point(1,2) };
Wrapper w2 = w1; // 複製參考,指向同一物件
w2.P.X = 99; // w1.P.X 也變成 99
| 特性 | 結構 | 類別 |
|---|---|---|
| 型別分類 | 值型別 | 參考型別 |
| 繼承 | 不可繼承(隱性密封),基類固定為 System.ValueType | 支援單一繼承 |
| 預設建構函式 | 不可自訂無參數建構函式 | 可自訂 |
| Null 值 | 預設不可為 null(可用 Nullable<T>) | 可為 null |
| 效能 | 小型物件配置/複製較快,無 GC 壓力 | 適合大型、具身分識別的物件 |
結構適合輕量資料容器(如 Point、DateTime);類別適合複雜行為與狀態管理。
所有型別(含 int、struct)隱性繼承 System.Object,擁有 ToString()、GetHashCode()、Equals() 等方法。Console.WriteLine 會自動呼叫 ToString(),值型別會自動裝箱為 Object 實例。