typeof(myType).TypeHandle是否使用反射?

Dan*_*nor 5 c#

如果我写了这段代码:

typeof(myType).TypeHandle 
Run Code Online (Sandbox Code Playgroud)

它会用反射吗?

与以下有多大不同:

Type.GetType(string).TypeHandle
Run Code Online (Sandbox Code Playgroud)

是吗?

Jon*_*eet 7

嗯,这实际上取决于你所说的"反思" - 这并不是严格定义的.

typeof在编译的代码中使用有两个部分.第一个是ldtoken在CIL规范中使用的是这样描述的IL指令:

ldtoken指令为指定的元数据标记推送RuntimeHandle.令牌应为以下之一:

  • methoddef,methodref或methodspec:推送RuntimeMethodHandle
  • typedef,typeref或typespec:推送RuntimeTypeHandle
  • fielddef或fieldref:推送RuntimeFieldHandle
推送到堆栈上的值可用于调用系统类库中的反射方法

在此之后,拨打电话Type.GetTypeFromHandle.

Type.GetType(string)如果这是您所关注的,那么这一切都要快得多.

编辑:我刚刚注意到你问题的TypeHandle部分.据我所知,MS编译器不会优化对GetTypeFromHandle和TypeHandle的调用,即使我猜你真的只需要ldtoken调用.

是否所有这些都被视为"反思"取决于你......