0

这与我的另一个问题有关,但这次非常具体。是否可以使用 AOP(尤其是 PostSharp)来检测是否使用了函数的返回值?例如

var x = y.func();  // used
y.func(); // not used

请注意,应针对此特定调用执行检测,而不是针对一般函数执行检测。

我从未使用过 AOP/PostSharp,所以即使我在 PostSharp 的文档中找不到答案,我也不能确定它不存在。不过,我并不坚持使用 PostSharp。我可以使用任何库,只要它能完成这项工作。

4

2 回答 2

1

您不能为此使用 AOP,但是(当您了解该工具时)编写一些完成这项工作的 MSIL 分析非常容易。

基本上,当不使用方法返回值时,在“call”或“c​​allvirt”之后会有一个“pop”指令。您可以使用 PostSharp 来完成这项工作(使用低级编织器,定义一个 IAdvice 拦截您想要的方法的调用,定义一个 InstructionSequence 书签,再阅读一条指令,测试它是否是“pop”,然后回滚到书签以便扫描可以安全地继续。

但我想知道你为什么需要它,我同意妮可的回答。

于 2009-11-05T13:19:20.810 回答
0

虽然这很有可能,但它是非常不适合这项工作的工具,因此您最终会做比实施解决方案所需的工作更多的工作。我建议你回到你的另一个问题,专注于寻找更好的候选方法,而不是专注于如何用螺丝刀钉钉子......

于 2009-11-05T13:12:01.417 回答