如何通过属性包装方法?

时间:2010-02-05 10:39:15

标签: c# attributes

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

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

[LogTimings]
public void work()
{
  ..
}

这是将方法包装到另一个方法(see this python implementation)。

5 个答案:

答案 0 :(得分:8)

在.NET中可以使用AOP。这是关于它的article。这是.NET的list of AOP frameworks

答案 1 :(得分:4)

查看PostSharp,一个适用于.NET的AOP框架。

在日志记录和计时方面,还有一个名为Gibraltar的框架,它与PostSharp集成,可以更容易地收集和使用结果。我一直有意思去尝试...

答案 2 :(得分:1)

如果使用PostSharp,则无需使用其他编译器即可完成此操作。

答案 3 :(得分:1)

我在.Net上写了一些关于AOP的东西: Help and Information about Aspect Oriented Programming

答案 4 :(得分:1)

仅使用标准.NET框架库,您必须通过派生System.Runtime.Remoting.Proxies.RealProxy来创建包装功能。

然后,您可以将此功能应用于您的课程,但此课程必须来自System.MarshalByRefObject

这是一个相当大的限制,这就是为什么你可能想看看像PostSharp这样的第三方组件。