如何通过属性包装方法?
我想知道是否可以通过添加属性来包装方法。
示例:我想记录方法执行的执行时间。
[LogTimings] public void work() { .. }
这是一种将方法包装到另一种方法中( 参见此python实现 )。
在.NET中可以使用AOP。 这是一篇关于它的文章 。 这里是.NET 的AOP框架列表 。
看看PostSharp ,一个用于.NET的AOP框架。
在记录和计时方面,还有一个名为Gibraltar的框架,它与PostSharp集成,可以更容易地收集和使用结果。 我一直有意义去尝试…
如果使用PostSharp,则无需使用其他编译器即可完成此操作。
我在这里写了一些关于AOP的东西: 关于面向方面编程的帮助和信息
仅使用标准.NET框架库,您必须通过派生System.Runtime.Remoting.Proxies.RealProxy
来创建包装function。
然后,您可以将此function应用于您的类,但此类必须派生自System.MarshalByRefObject
。
这是一个相当大的限制,这就是为什么你可能想看看像PostSharp这样的第三方组件。