做类型(myType).类型句柄使用反射

本文关键字:类型 反射 句柄 myType | 更新日期: 2023-09-27 17:47:24

如果我写了这段代码:

typeof(myType).TypeHandle 

它会使用反射吗?

与以下几点有何不同:

Type.GetType(string).TypeHandle

是吗?

做类型(myType).类型句柄使用反射

嗯,这实际上取决于你所说的"反射"是什么意思——这并没有完全严格定义。

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

ldtoken 指令推送 指定的运行时句柄 元数据令牌。令牌应为一个 的:

  • 方法定义、方法引用或 方法规范:推送一个 RuntimeMethodHandle
  • A typedef, Typeref 或 TypeSpec :推送一个 RuntimeTypeHandle
  • A fielddef 或 fieldref : 推送一个 RuntimeFieldHandle
推送到堆栈上的值可以是 在调用反射方法时使用 系统类库

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

但是,如果这是您所关心的,那么这一切都比Type.GetType(string)快得多。

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

这一切是否算作"反思"取决于你......