有没有一种方法可以将属性应用于首先执行的方法?

3

不使用类似PostSharp这样的库,是否有一种方法可以设置自定义属性,在附加到方法时具有逻辑,并在进入该方法之前执行?

1个回答

5
不,属性并不意味着注入代码。像PostSharp这样的工具通过花招来解决这个问题,但是没有这个工具,就不可能实现。另一个选项可能是使用装饰器模式,可能会动态地实现接口(这并不容易)。然而,在方法顶部添加一个实用程序方法调用要简单得多,并且假定它是可以接受的,因为如果您可以访问添加属性,则可以访问添加方法调用。
换句话说:像PostSharp这样的工具存在,正是因为这种功能在开箱即用的情况下不存在。
// poor man's aspect oriented programming
public void Foo() {
    SomeUtility.DoSomething();
    // real code
}

在某些情况下,子类化可能很有用,特别是如果子类化是在运行时(元编程)完成的:

class YouWriteThisAtRuntimeWithTypeBuilder : YourType {
    public override void Foo() {
        SomeUtility.DoSomething();
        base.Foo();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接