做类型(myType).类型句柄使用反射
本文关键字:类型 反射 句柄 myType | 更新日期: 2023-09-27 17:47:24
如果我写了这段代码:
typeof(myType).TypeHandle
它会使用反射吗?
与以下几点有何不同:
Type.GetType(string).TypeHandle
是吗?
嗯,这实际上取决于你所说的"反射"是什么意思——这并没有完全严格定义。
在编译的代码中使用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
调用。
这一切是否算作"反思"取决于你......