钩子在没有委托的情况下运行(反射)

Its*_*uni 5 c# reflection unity-game-engine

有没有一种方法可以使用反射将一个函数连接到另一个函数而不使用委托?

class A
{
    void Foo()
    {
    }
}

class B
{
    void Main()
    {
        A a = new A();
        a.GetType().GetMethod("Foo").AddHook(a, Func); //I want something like this
        a.Foo();
        //Func gets called
    }

    void Func()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法FuncFoo不使用事件、委托或仅从Func内部调用的情况下调用之后调用Foo

我需要这个来更新我游戏的 UI 控制器。

我看到大多数人处理这个问题的方式是将一堆事件添加到 A 并将 B 订阅到这些事件。像这样

class A
{
?    public delegate void UICallback();
?    public event UICallback onFoo;
    void Foo()
    {
    ?    onFoo.Invoke();
    }
}

class B
{
    void Main()
    {
        A a = new A();
        ?a.onFoo += Func;
        a.Foo();
    }

    void Func()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现这种方法的问题是我需要向许多类添加一堆这样的事件(可能超过 5 个甚至 10 个),然后记住在函数末尾调用它们以更新 UI(调用例如,在 StartBattle() 结束时 onBattleStarted)。这除了通过大块的事件声明增加我的类的大小使其难以阅读之外,还使其更难维护。

编辑我想没有一个人真正明白我在找......我想办法挂钩Func,以Foo未做任何改动Foo,即不Foo知道该回调存在。使用操作无济于事,因为我需要指定Foo它应该调用的on的参数Func

感谢您的帮助!