C# 里拿到一个类型,有 typeof 和 GetType() 两条路。返回值都是 System.Type,参数要求不一样。
typeof 的括号里必须是类型名,不能是变量:
csharp
Int32 i = new Int32();
Type t1 = typeof(Int32); // 可以
// Type t2 = typeof(i); // 编译不过,i 是变量GetType() 继承自 object,每个实例都能调,返回这个对象运行时的类型:
csharp
Int32 i = new Int32();
Type t = i.GetType(); // 也是 Int32编译期就知道类型,用 typeof(SomeType)。手里只有对象、要问它实际是什么(尤其是基类引用、接口引用),用 obj.GetType()。泛型里拿 T 的类型同样是 typeof(T),因为 T 在那里就是类型参数,不是变量。