如何通过属性包装方法?

我想知道是否可以通过添加属性来包装方法。

示例:我想记录方法执行的执行时间。

[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这样的第三方组件。