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

时间:2008-10-03 19:03:50

标签: c#

如果我写了这段代码:

typeof(myType).TypeHandle 

它会使用反射吗?

与...有多大不同:

Type.GetType(string).TypeHandle
是吗?

1 个答案:

答案 0 :(得分:7)

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

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

  

ldtoken指令推送了一个   指定的RuntimeHandle   元数据令牌。令牌应为一个   of:

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

此后,拨打Type.GetTypeFromHandle

这比Type.GetType(string)显着更快,但如果这是你所关注的。

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

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