有没有一种方法可以在不使用委托(delegate)的情况下使用反射将一个函数 Hook 到另一个函数?
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()
{
}
}
有没有办法在调用 Foo
后调用 Func
而无需使用事件、委托(delegate)或仅从 Foo 内部调用
? Func
我需要它以便我的游戏的 UI Controller 可以得到更新。
我看到大多数人处理这个问题的方式是将一堆事件添加到 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()
{
}
}
我发现这种方法的问题是我需要向许多类添加一堆这样的事件(可能超过 5 个甚至 10 个),然后记得在函数末尾调用这些事件来更新UI(例如,在 StartBattle() 结束时调用 onBattleStarted)。这除了增加我的类的大小外,还有大块的事件声明使阅读变得难看,而且更难维护。
编辑 我认为没有人真正理解我在寻找什么......我想要一种方法将 Func
Hook 到 Foo
不对 Foo
进行任何更改,即 Foo
不知道此回调存在。使用 Action 无济于事,因为我需要在 Foo
的参数上指定它应该调用 Func
感谢您的帮助!
最佳答案
您可以在 Func() 的末尾调用 Action。
Class A
{
void Foo()
{
}
}
Class B
{
void Main()
{
A a = new A();
Func( () => {a.Foo();});
}
void Func(Action onFinish)
{
//Enter your code here
onFinish();
}
关于c# - 钩子(Hook)在没有委托(delegate)的情况下运行(反射),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48287441/