首页 > 后端开发 > C++ > 我们如何在 C# 中创建一个通用的'FromEvent”方法来处理任何类型和参数列表的事件?

我们如何在 C# 中创建一个通用的'FromEvent”方法来处理任何类型和参数列表的事件?

Patricia Arquette
发布: 2024-12-28 05:00:10
原创
114 人浏览过

How Can We Create a Generic `FromEvent` Method for Handling Events of Any Type and Parameter List in C#?

不指定委托类型的通用 FromEvent 方法

问题陈述:

目前,基于事件创建任务需要为每个事件中的每个事件定义一个自定义的 FromEvent 方法 班级。这可能会变得麻烦且重复。目标是开发一个通用的 FromEvent 方法,可以处理任何对象上的任何事件。

挑战:

遇到的主要挑战是:

  • 在代码中将事件作为字符串(例如“OnCompletion”)传递只会因事件而引发错误可在 = 或 -= 运算符的左侧访问。
  • 事件的委托在运行时未知,需要变化。
  • 发出 IL 以设置事件的结果TaskCompletionSource 是动态的。

解决方案:

综合解决方案涉及:

  1. 动态方法创建:为每个遇到的委托类型创建一个动态方法。此方法动态调用 TaskCompletionSourceHolder 类的 SetResult 方法,该方法又设置任务的结果。
  2. Reflection: 使用反射检索事件的 EventHandlerType 属性并创建委托来自发出的 DynamicMethod。
  3. 替换通用类型: 利用TaskFromEvent 扩展方法,而不是手动指定委托类型(例如,TaskFromEvent),如下代码所示:
object[] result = await obj.FromEvent("Event Name");
登录后复制

此方法支持任何返回类型和参数的事件列表。它消除了对样板代码的需要,并允许无缝且可重用地处理来自各种对象的事件。

以上是我们如何在 C# 中创建一个通用的'FromEvent”方法来处理任何类型和参数列表的事件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板