0

我正在使用 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() 的调用不会被拦截。任何人都可以帮忙吗?

4

1 回答 1

3

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

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

也许如果您解释您使用拦截的目的,可能会有更好的解决方案来解决您正在尝试做的事情。

于 2012-09-01T06:04:24.657 回答