gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:04:53 37 4
gpt4 key购买 nike

如果我写这段代码:

typeof(myType).TypeHandle 

它会使用反射吗?

有多少不同:

Type.GetType(string).TypeHandle

是吗?

最佳答案

好吧,这实际上取决于您所说的“反射”是什么意思——它并没有严格定义。

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

The ldtoken instruction pushes a RuntimeHandle for the specified metadata token. The token shall be one of:

  • A methoddef, methodref or methodspec: pushes a RuntimeMethodHandle
  • A typedef, typeref, or typespec : pushes a RuntimeTypeHandle
  • A fielddef or fieldref : pushes a RuntimeFieldHandle
The value pushed on the stack can be used in calls to reflection methods in the system class library

在此之后,将调用 Type.GetTypeFromHandle

这比 Type.GetType(string) 要快得多,但是,如果这是您所关心的。

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

是否所有这些都算作“反射”取决于你...

关于c# - typeof(myType).TypeHandle 是否使用反射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/168393/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com