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

C# typeof 運算符詳解:獲取類型資訊的核心工具

     編輯:關於C#

在 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 vs GetType() 對比

特性typeof(T)obj.GetType()
綁定時間編譯時期運行時期
運算元類型名稱物件實例
繼承行為返回指定類型返回實例實際類型
效能極高(無開銷)微小開銷

最佳實踐建議

  1. 優先使用 typeof 進行靜態類型檢查,避免不必要的實例化
  2. 配合 nameof 運算符(C# 6.0+)提升重構安全性
  3. 在泛型程式設計中善用 typeof(T) 獲取類型參數資訊
  4. 避免在熱路徑中重複調用,可快取 Type 物件

掌握 typeof 運算符是深入理解 C# 類型系統與反射機制的基礎,善用它能編寫出更健壯、可維護的程式碼。

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