如何用Reflection + C#获取所有引用

时间:2010-01-31 16:36:42

标签: c# reflection

使用System.Reflection,我可以从特定的类中获取所有方法

我需要知道对这些方法的引用是什么。例如:在Visual Studio中,如果需要特定对象的引用

  • 右键单击该对象并选择“查找所有引用”
  • Visual Studio显示此选定对象的引用

我想做同样的事情,但是从带有反射的代码或其他方式。

我可以这样做吗?

4 个答案:

答案 0 :(得分:5)

这不能用反射来完成。 Reflection是一种检查元数据和程序集的工具。为了找到对给定方法/类型的所有引用,您需要检查程序集的基础IL。反射只有非常有限的IL功能(简单地将其作为字节数组返回)。您需要自定义检查该字节流,以便收集有关其引用内容的任何上下文。

答案 1 :(得分:2)

这不是可以通过特定类的运行时反射直接访问的东西。您必须自省整个源代码树或生成的IL,以确定对具有相同名称的特定方法的任何引用是否是您尝试查找引用的方法的正确重载和签名。

此外,如果没有额外的工作,您永远不会找到对通过反射调用的特定方法的引用。 (这就是为什么混淆那种代码具有挑战性和容易出错的一个原因。)

答案 2 :(得分:2)

如果您只是想查找参考资料以供参考,Reflector就有这个功能。

http://www.red-gate.com/products/reflector/

答案 3 :(得分:0)

Microsoft根据开源许可证发布了Common Compiler Infrastructure项目。这些项目旨在支持许多与编译器相关的功能,包括您所指的汇编分析。文档是有限的,因此您需要全面了解ECMA-335(公共语言基础结构),以便有效地将其用于您的目的。

这里没有魔法代码示例。这是一项庞大且相当复杂的任务,您将自己完成大部分工作。