加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在运行时动态创建函数

发布时间:2020-12-15 18:28:47 所属栏目:百科 来源:网络整理
导读:它可能甚至不可能这样做,但无论如何我会问. 是否可以创建一个接收字符串的函数,然后将其用作lambda中使用的转到运算符(=)的右侧参数? 实际上,我想要做的是能够在运行时重新定义特定类的特定方法.我希望在程序运行时写下一个函数并将其附加到委托.可能吗?
它可能甚至不可能这样做,但无论如何我会问.
是否可以创建一个接收字符串的函数,然后将其用作lambda中使用的转到运算符(=>)的右侧参数?

实际上,我想要做的是能够在运行时重新定义特定类的特定方法.我希望在程序运行时写下一个函数并将其附加到委托.可能吗?

解决方法

最简单的方法可能就是TcKs建议的DLINQ.

最快的(我相信,在3.5中)是创造一个DynamicMethod.它也是最可怕的方法.你实际上是使用IL构建一个方法,它与在机器语言中编写代码的感觉大致相同.

我需要这样做才能动态地将事件处理程序附加到某些东西上(好吧,我不需要这样做,我只是想让单元测试事件更容易).当时看起来有点令人生畏,因为我不知道有关IL的废话,但我想出了一个简单的方法来实现这一目标.

你所做的是创建一个完全符合你想要的方法.越紧凑越好.如果我能弄清楚你想要做什么,我会提供一个例子.您在DLL项目中的类中编写此方法,并在发布模式下编译它.然后在Reflector中打开DLL并反汇编您的方法. Reflector为您提供了您希望反汇编的语言选项 – 选择IL.现在,您需要添加到动态方法中的确切调用.只需按照MSDN上的示例,为您反映的方法代码切换示例的IL.

动态方法一旦构造,就会以与编译方法大致相同的速度调用(看到一个测试,其中动态方法可以在~20ms内调用,其中反射超过200ms).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读