交换方法指针

时间:2017-06-19 10:35:24

标签: c# pointers methods

我一直试图解决这个问题一段时间,我一直无法找到答案。 基本上,我有一个特定的方法,当被调用时,实际上执行另一个不同的方法,而不是方法本身,我假设需要我修改到方法的指针指向的位置。

说这个,

public class A : OtherRandomClass
{
   protected void SomeMethod()
   {
     //code
   }
}

public class B
{
   public void OtherMethod()
   {
     //code that I want to execute when SomeMethod is called
   }
}

遗憾的是我无法修改A类的源代码,但我想要尝试做的是对SomeMethod进行任何调用实际调用OtherMethod而阻止 SomeMethod本身被调用,我不想求助于交换方法体。

我知道这是多么糟糕的做法,但我使用的框架只是简单的愚蠢,我别无选择。

有什么方法吗?

编辑找到我想要的东西,感谢任何试图提供帮助的人!

1 个答案:

答案 0 :(得分:0)

这看起来并不简单,而且说实话,我从未试图做过这样的事情。

我真的很想知道你的背景,因为如果你想做的是我的最后一个选择,我就不会使用这个程序集。

This answer建议用自己的反射替换加载的方法体(用中间语言编写):

  

你可以使用MethodInfo.GetMethodBody()。GetILAsByteArray(),修改   那,然后将其插回到MethodBuilder.CreateMethodBody()。

然后,您可以检查this question and its answers以大致了解如何实现所有内容,但看起来CreateMethodBody并未得到完全支持,并且可能会出现意外行为。

总的来说,它非常复杂,看起来不值得麻烦。