如果我写了这段代码:
typeof(myType).TypeHandle
它会使用反射吗?
与...有多大不同:
Type.GetType(string).TypeHandle
是吗?
答案 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)
显着更快,但如果这是你所关注的。
ldtoken
调用。
是否所有这些都被视为“反思”取决于你......