值型別與參考型別互轉是 C# 核心機制。裝箱將值型別包裝為物件 (參考型別),拆箱則提取回值型別。相等比較有四種方式,語意各異。
ToString()、介面轉換、物件陣列存值型別等)。
int i = 10;
object y = (object)i; // 裝箱:配置堆疊記憶體,複製值
int x = (int)y; // 拆箱:檢查型別相容,複製值回堆疊
| 方法 | 類型 | 語意 | 特殊行為 |
|---|---|---|---|
| ReferenceEquals(a,b) | 靜態 | 參考相等 (同一記憶體位址) | 值型別永遠 false (各自裝箱成不同物件) |
| 虛擬 Equals(a,b) | 虛擬實例 | 值相等 (可覆寫) | 預設參考相等,String/ValueType 覆寫為值比較 |
| 靜態 Equals(a,b) | 靜態 | 值相等 | 可處理 null (一 null 一不 null 回 false,雙 null 回 true) |
| 運算符 == | 運算子 | 介於兩者間 | 值型別比值,參考型別比參考 (String 覆寫為值比較) |
List<T> 取代 ArrayList,介面約束用 where T : struct。Equals、GetHashCode、operator ==、operator !=,確保語意一致。string.Equals(a,b, StringComparison.Ordinal) 明確指定比較規則。ReferenceEquals 僅用於確認「是否為同一個物件實例」。