技术开发 频道

颠覆C#王权的“魔比斯环”



    2. 如何拦截构造方法

    AOP最重要的特性就是对方法的拦截,这其中也包括构造方法。所谓拦截,就是在执行原方法时,要在两个位置来执行我们织入的代码,如日志代码。这两个位置是before(在原代码执行之前)和after(在原代码执行之后)。当然,还可以对源代码进行around(完全取代原来的代码)。这对于普通的方法来说并不算什么,如上面的Method1方法。要想在ProxyClass类中的Method1方法拦截Class1类中的方法,before、after和around的实现分别如下:
before: public override void Method1() { base.Method1(); ... } after: public override void Method1() { ... base.Method1(); } around: public override void Method1() { ... ...}
    但这对于构造方法来说却无法实现。因此,在子类中调用父类中的构造方法只能在方法后面调用,如下面代码所示:
public Class2(String s) : base(s) {...}
    从上面的代码可以看出,构造方法只能实现before,而不能实现after和around。也就是在子类中无论写不写base关键字,必须调用父类中的构造方法(如果不写,调用父类中无参数的默认构造方法)。更不会有下面的代码形式:

public Class2(String s) {... base(s);}
    因此,如何使构造方法也拥有after和around特性,就成为实现AOP构架的第二个拦路虎。
0
相关文章