C#中的typeof()与GetType()

获取类型

获取类型主要通过 Object.GetType()方法和typeof() 运算符两种方式。

不同点:

  • Object.GetType()是Object类的方法,可以获取任何对象的类型。
  • typeof()运算符是运算符,只是长得像函数,需要传入类本身而非实例

相同点:

  • Object.GetType()typeof()获取的信息是一致的

在实际应用中经常使用Object.GetType()方法获取实例的类型

csharp
Foo Foo1 = new Foo();
Console.WriteLine($"GetType():  {Foo1.GetType()}");
Console.WriteLine($"typeof(): {typeof(Foo)}"); //正确
Console.WriteLine($"typeof(GetType()): {typeof(Foo1.GetType())}"); 

class Foo { }

输出结果:

csharp
GetType():  Foo
typeof():   Foo
typeof(GetType()): *报错*

对象类型判断

主要使用is运算符进行判断,is运算符可以判断对象是否是某个类型或派生自某个类型或接口。

csharp
Foo Foo1 = new Foo();
Console.WriteLine($"Foo1 is IFoo: {Foo1 is IFoo}");
Console.WriteLine($"Foo1 is Foo: {Foo1 is Foo}");

interface IFoo { }
class Foo : IFoo { }

输出结果:

csharp
Foo1 is IFoo: True
Foo1 is Foo: True

值得注意的是,泛型类的实例在GetType()后的返回值形如MyClass`1[T],T不同时,GetType()的结果亦不同

比如:A<B>与A<C>不会被认为是同一个类

ECS-TH1 初识