我一直试图解决这个问题一段时间,我一直无法找到答案。 基本上,我有一个特定的方法,当被调用时,实际上执行另一个不同的方法,而不是方法本身,我假设需要我修改到方法的指针指向的位置。
说这个,
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本身被调用,我不想求助于交换方法体。
我知道这是多么糟糕的做法,但我使用的框架只是简单的愚蠢,我别无选择。
有什么方法吗?
编辑找到我想要的东西,感谢任何试图提供帮助的人!
答案 0 :(得分:0)
这看起来并不简单,而且说实话,我从未试图做过这样的事情。
我真的很想知道你的背景,因为如果你想做的是我的最后一个选择,我就不会使用这个程序集。
This answer建议用自己的反射替换加载的方法体(用中间语言编写):
你可以使用MethodInfo.GetMethodBody()。GetILAsByteArray(),修改 那,然后将其插回到MethodBuilder.CreateMethodBody()。
然后,您可以检查this question and its answers以大致了解如何实现所有内容,但看起来CreateMethodBody并未得到完全支持,并且可能会出现意外行为。
总的来说,它非常复杂,看起来不值得麻烦。