是否可以通过反射查找从一个类到另一个类的所有方法调用?

时间:2010-09-30 01:38:42

标签: .net reflection

我想在一个类中找到在另一个类上创建的所有方法调用。

例如:

如果class1调用class2.Foo()但不调用class2.Bar(),那么我想知道它。

几乎就像耦合分析一样。这可能与反思有关吗?

3 个答案:

答案 0 :(得分:2)

不,反思是关于类型,而不是代码。您可以通过System.Reflection找到任何您想要的类型:字段,属性,事件和方法。但方法调用在CIL中编码。反射在那里停止,你得到的只是MethodInfo.GetMethodBody()。

这并没有阻止一些人;你实际上可以解释通过该方法传递给你的CIL。 Lutz Roeder和他那令人敬畏的.NET Reflector工具闪耀着光芒。我所知道的.NET框架实际工作方式的百分之九十,以及我自己如何利用它,都被放在一个银盘上。它非常棒;给这个人一枚奖牌。并且MSFT使用Reference Source跟进。

答案 1 :(得分:0)

这是可能的,因为它由几个IDE(至少对于Java)完成。无论如何,您可能会进行部分错误的分析。在编译时很难确定在派生类中存在方法覆盖时调用哪些方法。

不,反射是不可能的。您需要静态代码分析来计算耦合度量。

答案 2 :(得分:-1)

您不会说这是代码还是实用程序。在代码中,您需要检查类的CIL。

对于实用程序,您可以尝试.NET ReflectorNCover(我不确定我是否有正确的名称)。 .NET Reflector有一个插件接口,所以你可以用它做点什么。