2010-10-14 150 views
1

有没有办法知道一个对象的C#方法是否被调用或不使用反射?有没有办法知道一个对象的C#方法是否被调用?

+3

请详细说明。 – 2010-10-14 08:43:03

+0

我的猜测是OP想要一种类似AOP的方式来添加代码来确定哪些代码路径被执行。 – 2010-10-14 08:48:59

+0

谢谢你的宝贵答案。 其实我的场景很简单。我正在研究一个现有的项目,它使用以下方法来更改数据库中的值。 如果该类的属性为null,则不要在数据库中更改此值,以便客户端只能使用需要更改属性来初始化该类。但有时某些属性可能会更改为空,这种情况在当前的逻辑中将不被支持。 – fresky 2010-10-18 03:31:41

回答

0

编号反射只知道一个类型是如何构造的,而不是你的应用程序调用它的方式。

您可以在一个方法内创建一个数组StackFrame以了解它是如何被调用的。

Resharper可以检查的方法被调用或没有(这是一个Visual Studio插件)

+0

我怀疑Resharper可以以100%的准确度来判断。 – 2010-10-14 09:37:12

+0

我没有声称会这样吗?尽管只要所有组件都在相同的解决方案中,它的确做得很好。 – jgauffin 2010-10-14 09:59:47

0

如果你的问题是如何找出是否一个特定的方法永远不会在任何情况下和任何输入被调用,那么反思就无法为你做。

您需要工具来执行静态程序分析,但这些并不完全是为了在运行时使用。

如果您可以更详细地描述您要完成的任务,我们可能会提出一个替代方案。

1

找出您的方法是否被调用的一种方法是使用代码覆盖工具。 Visual Studio Ultimate包含这些工具来帮助确定代码覆盖率。您首先测试您的代码,然后运行测试,或者正常运行您的应用程序,然后检查结果。

或者您也可以使用文本编辑器在源代码中搜索方法名称。 (这是迄今为止最简单的)。

0

如果您想在程序集中找到程序集的任何其他部分都不会调用的任何方法,那么FxCop有一个“死代码”规则,它将查找任何此类方法。

死代码搜索不包括可以从外部世界调用的方法,例如公共方法。

相关问题