相同點:兩者返回的都是 System.Type
區別TypeOf是一個運算符,只能針對類型進行運算。
GetType是一個集成自Object的方法,任何一個object的變量都可以調用。
以下來自msdn:
C# typeof 運算符(在 Visual Basic 中為 GetType 運算符,在 Visual C++ 中為 typeid 運算符)返回一個 Type 對象。
表示某個類型是唯一的 Type 對象;即,兩個 Type 對象引用當且僅當它們表示相同的類型時,才引用相同的對象。 這允許使用參考等式來比較 Type 對象。
這個類是線程安全的;多個線程可以同時從此類型的一個實例讀取數據。Type 的實例可表示以下任何類型:
-
類
-
值類型
-
數組
-
Interfaces
-
指針
-
枚舉
-
構造泛型類型和泛型類型定義
-
構造泛型類型、泛型類型定義和泛型方法定義的類型實參和類型形參
可以通過下列方式獲得對與某個類型關聯的 Type 對象的引用:
-
Object ..::. GetType 方法返回表示實例類型的 Type 對象。
-
靜態 GetType 方法返回 Type 對象,該對象表示由其完全限定名指定的類型。
-
Module ..::. GetTypes 、 Module ..::. GetType 和 Module ..::. FindTypes 方法返回 Type 對象,這些對象表示在某個模塊中定義的類型。 第一個方法可用於獲得模塊中定義的所有公共類型和私有類型的 Type 對象的數組。 (可以通過 Assembly ..::. GetModule 或 Assembly ..::. GetModules 方法,或通過 Type ..::. Module 屬性獲得 Module 的實例。)
-
FindInterfaces 方法返回某個類型所支持的接口類型的篩選后的列表。
-
GetElementType 方法返回表示元素的 Type 對象。
-
GetInterfaces 和 GetInterface 方法返回表示某個類型所支持的接口類型的 Type 對象。
-
GetTypeArray 方法返回表示任意一組對象所指定的類型的 Type 對象數組。 這些對象用 Object 類型的數組指定。
-
GetTypeFromProgID 和 GetTypeFromCLSID 方法是為 COM 互操作而提供的。 這些方法返回表示 ProgID 或 CLSID 所指定的類型的 Type 對象。
-
GetTypeFromHandle 方法是為交互操作而提供的。 此方法返回表示類句柄所指定的類型的 Type 對象。
-
C# typeof 運算符、C++ typeid 運算符和 Visual Basic GetType 運算符獲得某個類型的 Type 對象。
-
MakeGenericType 方法返回 Type 對象,該對象表示構造泛型類型,如果該對象的 ContainsGenericParameters 屬性返回 true,則該類型為開放構造類型,否則為封閉構造類型。 只能實例化封閉的泛型類型。
-
MakeArrayType、 MakePointerType 和 MakeByRefType 方法返回 Type 對象,這些對象分別表示指定類型的數組、指向指定類型的指針以及引用參數的類型(在 C# 中為 ref,在 Visual Basic 中為 ByRef)。
using System; using System.Reflection; class Example { static void Main() { Type t = typeof(String); MethodInfo substr = t.GetMethod("Substring", new Type[] { typeof(int), typeof(int) }); Object result = substr.Invoke("Hello, World!", new Object[] { 7, 5 }); Console.WriteLine("{0} returned \"{1}\".", substr, result); } } /* This code example produces the following output: System.String Substring(Int32, Int32) returned "World". */