Unity拦截机制在同一类中的方法之间不起作用



我正在使用C#+Unity(2.1)。如果调用来自外部,则拦截方法可以正常工作,但在同一类内的方法之间,只拦截第一个方法。例如:

    [InterceptorAttribute]
    public int A(int a, int b)
    {
         return B(a, b);
    }
    [InterceptorAttribute]
    public int B(int a, int b)
    {
         return a+b;
    }

对方法B()的调用未被截获。有人能帮忙吗?

如果你看看拦截是如何实现的,就会清楚为什么会发生这种情况。拦截器基本上是一个代理,它包裹在原始对象周围,并将调用转发给它,此外还调用任何相关的处理程序:

public int A(int a, int b)
{
  callHandlers();
  return originalObject.A(a, b);
}
public int B(int a, int b)
{
  callHandlers();
  return originalObject.B(a, b);
}

即使这两个调用分别被截获,一旦调用originalMethod.A,对B的调用将只调用originalObject.B,而不会调用proxy.B

也许如果你解释一下你使用拦截的目的,可能会有一个更好的解决方案来解决你想要做的事情

最新更新