在 C# 程式設計中,typeof 運算符是用於在編譯時期獲取類型資訊的關鍵工具。它返回一個 System.Type 物件,代表指定類型的中繼資料,廣泛應用於反射、泛型程式設計、序列化等場景。
typeof 運算符的語法簡單直觀:
Type typeInfo = typeof(類型名稱);
它接受一個類型名稱(而非變數實例)作為運算元,並在編譯時期解析,因此效能極高且類型安全。
以下範例展示了 typeof 對基本類型、陣列類型及別名類型的處理:
using System;
class TypeofDemo
{
static void Main()
{
Console.WriteLine(typeof(int)); // 輸出: System.Int32
Console.WriteLine(typeof(System.Int32)); // 輸出: System.Int32
Console.WriteLine(typeof(string)); // 輸出: System.String
Console.WriteLine(typeof(double[])); // 輸出: System.Double[]
}
}
int 是 System.Int32 的別名,typeof 返回相同的 Type 物件,證明它們本質上是同一類型。double[])、泛型(List<string>)、指標類型(需 unsafe 上下文)等。GetType()(運行時獲取實例類型),typeof 在編譯時確定,無運行開銷。typeof(MyClass).GetMethods()typeof(Dictionary<,>).MakeGenericType(typeof(string), typeof(int))typeof(MyClass).IsDefined(typeof(SerializableAttribute), false)| 特性 | typeof(T) | obj.GetType() |
|---|---|---|
| 綁定時間 | 編譯時期 | 運行時期 |
| 運算元 | 類型名稱 | 物件實例 |
| 繼承行為 | 返回指定類型 | 返回實例實際類型 |
| 效能 | 極高(無開銷) | 微小開銷 |
typeof 進行靜態類型檢查,避免不必要的實例化nameof 運算符(C# 6.0+)提升重構安全性typeof(T) 獲取類型參數資訊Type 物件掌握 typeof 運算符是深入理解 C# 類型系統與反射機制的基礎,善用它能編寫出更健壯、可維護的程式碼。