CodeGo.net>如何在运行时向事件添加一个更通用的事件处理程序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了CodeGo.net>如何在运行时向事件添加一个更通用的事件处理程序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1167字,纯文字阅读大概需要2分钟。
内容图文
如果我有一个从EventArgs继承的类型(我们称它为EventArgs1),还有另外一堆从EventArgs1继承的类(我们将它们统称为EventArgsX),然后是一堆EventHandler< EventArgsX& ,如果在运行时我为这些事件之一传递了EventInfo,并且我想添加一个事件处理程序,该事件处理程序需要第二个类型为EventArgs1的参数(例如MyEventHandler(object sender,EventArgs1 e)),我该怎么办? 如果事件的类型为EventHandler< EventArgs1> ;,则返回true.然后我会这样做:
eventInfo.AddEventHandler(this, new EventHandler<EventArgs1>(MyEventHandler));
但这在事件的类型为EventHandler< EventArgsX>时会引发异常,并且由于我不知道在编译时EventArgsX是什么,所以我不能简单地将EventHandler< EventArgsX>如果我确实知道我在编译时将处理程序添加到哪个事件,那么这将是完全可以接受的:
MyEvent += MyEventHandler
但是我根本无法弄清楚如何在运行时执行此操作.有什么建议么?
解决方法:
I can’t simply new up an
EventHandler<EventArgsX>
当然可以,尽管您需要使用Delegate.CreateDelegate()和反射来完成.假设MyEventHandler是对此的实例方法,则可以这样执行:
var eventInfo = …;
EventHandler<EventArgs1> badHandler = MyEventHandler;
var goodHandler = Delegate.CreateDelegate(
eventInfo.EventHandlerType, this, badHandler.Method);
eventInfo.AddEventHandler(this, goodHandler);
内容总结
以上是互联网集市为您收集整理的CodeGo.net>如何在运行时向事件添加一个更通用的事件处理程序全部内容,希望文章能够帮你解决CodeGo.net>如何在运行时向事件添加一个更通用的事件处理程序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。