使用System.Reflection,我可以获取特定类中的所有方法
我需要知道这些方法的引用。例如:在Visual Studio中,如果要查看特定对象的引用
- 右键单击该对象并选择“查找所有引用”
- Visual Studio会显示所选对象的引用
我想做同样的事情,但是通过反射或其他方式从代码中实现。
我能做到吗?
使用System.Reflection,我可以获取特定类中的所有方法
我需要知道这些方法的引用。例如:在Visual Studio中,如果要查看特定对象的引用
我想做同样的事情,但是通过反射或其他方式从代码中实现。
我能做到吗?
使用反射无法完成此操作。反射是一种用于检查元数据和程序集的工具。要查找给定方法/类型的所有引用,您需要检查程序集的底层IL。反射只具有非常有限的IL功能(仅将其作为字节数组返回)。您需要自定义检查该字节流以收集有关其引用内容的任何上下文。
这并不是在特定类的运行时反射直接访问的内容。您需要检查整个源代码树或结果 IL,以确定是否有指向特定方法的任何引用具有相同名称的正确重载和签名,以便找到对该方法的引用。
此外,如果没有额外的工作,您将永远无法找到通过反射本身调用的特定方法的引用。(这是为什么混淆这种代码很具有挑战性和容易出错的原因之一。)
微软以开源许可证发布了Common Compiler Infrastructure项目。这些项目旨在支持许多与编译器相关的功能,包括您所提到的汇编分析。文档有限,因此您需要对ECMA-335(公共语言基础结构)有深入的理解,才能有效地将其用于您的目的。
这里没有神奇的代码示例。这是一个庞大而相当复杂的任务,在大部分时间里你将独自完成。