C# 引入統一型別系統,所有型別(包括值類型與參考類型)概念上都衍生自 object。這意味著連 int 這類「簡單型別」也能直接呼叫 object 的方法。
using System;
class Test {
static void Main() {
Console.WriteLine(3.ToString()); // 呼叫 object.ToString()
}
}
class Test {
static void Main() {
int i = 123;
object o = i; // 裝箱:值類型 → 參考類型
int j = (int)o; // 拆箱:參考類型 → 值類型
}
}
裝箱 會在堆疊建立物件並複製值;拆箱 則從物件取回值。這讓值類型能在需要物件的場合(如集合儲存)使用。
傳統 C++ 需用模板處理多型別比較:
// C++ 模板
template
T min(T i, T j) { return (i < j) ? i : j; }
C# 透過統一型別系統,單一方法即可處理所有型別:
void Compare(object a, object b) {
// 可比較 int、float、string 甚至自訂類別
// (需實作 IComparable 介面)
}
這種靈活性帶來風險:編譯器不會阻止比較 int 與自訂 class 的實例,執行時才會擲出例外。開發時務必謹慎設計,確保型別相容性。
ArrayList 等可儲存任意型別)