Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在运行时定义C#方法体(动态)_C#_Reflection_Dynamic_Proxy - Fatal编程技术网

在运行时定义C#方法体(动态)

在运行时定义C#方法体(动态),c#,reflection,dynamic,proxy,C#,Reflection,Dynamic,Proxy,我有一个基类,它定义(除其他外)某个空的虚拟方法(用作事件处理程序) 到目前为止,所有实例都是从派生类型创建的,派生类型会覆盖虚拟方法以使其充满生命。这种类型是动态生成的,并且做了它应该做的一切,但是我真的想知道反射(.Emit)或者.Net framework必须提供的任何杠杆是否能够只修改上述方法的主体 有什么想法吗 提前谢谢 与其尝试填充方法体,不如将委托传递给构造函数?动态地构建委托(例如,使用)相对容易,这样就不必担心修改现有类型。与其尝试填充方法体,不如将委托传递给构造函数?动态地构

我有一个基类,它定义(除其他外)某个空的虚拟方法(用作事件处理程序)

到目前为止,所有实例都是从派生类型创建的,派生类型会覆盖虚拟方法以使其充满生命。这种类型是动态生成的,并且做了它应该做的一切,但是我真的想知道反射(.Emit)或者.Net framework必须提供的任何杠杆是否能够只修改上述方法的主体

有什么想法吗


提前谢谢

与其尝试填充方法体,不如将委托传递给构造函数?动态地构建委托(例如,使用)相对容易,这样就不必担心修改现有类型。

与其尝试填充方法体,不如将委托传递给构造函数?动态地构建委托相对容易(例如,使用),这样就不必担心修改现有类型。

据我所知,编译后禁止修改现有代码。您可以动态添加新的代码段,但不允许更改现有代码段,这适用于已编译的命令和类或其他数据类型的定义。

据我所知,编译后禁止更改现有代码。您可以动态添加新的代码段,但不允许更改现有的代码段,这适用于已编译的命令和类或其他数据类型的定义。

您可以使主体调用委托,然后更改委托,而不是使方法虚拟并重写它

如果该方法的唯一用途是作为事件处理程序,那么为什么要将其作为一个方法呢?只需将生成的函数直接分配给eventhandler即可


您可以构造一个表达式树,然后将其编译成一个委托,然后将该委托分配给eventhandler。

您可以使主体调用一个委托,然后更改该委托,而不是使该方法虚拟并重写它

如果该方法的唯一用途是作为事件处理程序,那么为什么要将其作为一个方法呢?只需将生成的函数直接分配给eventhandler即可


您可以构造一个表达式树,然后将其编译成一个委托,然后将其分配给eventhandler。

谢谢,我想您大概是对的-我可以调用事件,而不是调用现有的方法。派生类可以为这些事件指定侦听器,因此它将是干净而漂亮的!谢谢你的意见!谢谢,我想你大概是对的——我可以调用事件,而不是调用现有的方法。派生类可以为这些事件指定侦听器,因此它将是干净而漂亮的!谢谢你的意见!