首页 / C# / c# – 没有代表的钩子(反射)
c# – 没有代表的钩子(反射)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 没有代表的钩子(反射),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1224字,纯文字阅读大概需要2分钟。
内容图文
![c# – 没有代表的钩子(反射)](/upload/InfoBanner/zyjiaocheng/782/815b9481c02a4d08bbbe282e0980b98e.jpg)
有没有办法可以使用反射将一个函数挂钩到另一个函数而不使用委托?
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而不使用事件,委托或只是从Foo内部调用Func?
我需要这个,所以我的游戏的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()
{
}
}
我用这种方法发现的问题是我需要向许多类添加一些这样的事件(可能超过5甚至10),然后记得在函数末尾调用那些更新UI(调用) onBattleStarted在StartBattle()的末尾,例如).除了使用大块事件声明增加我的类的大小使其难以阅读之外,这使得它更难维护.
编辑我认为没有人真正了解我正在寻找的东西…我想要一种方法将Func挂钩到Foo而不对Foo做任何更改,即没有Foo知道这个回调存在.使用动作无济于事,因为我需要在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# – 没有代表的钩子(反射)全部内容,希望文章能够帮你解决c# – 没有代表的钩子(反射)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。