C# 交换方法指针
我已经试着解决这个问题有一段时间了,但我还没有找到答案。 基本上,我有一个方法,当被调用时,它实际上执行另一个不同的方法,而不是我假设需要我修改的方法本身,方法指针指向的地方 说这个,C# 交换方法指针,c#,pointers,methods,C#,Pointers,Methods,我已经试着解决这个问题有一段时间了,但我还没有找到答案。 基本上,我有一个方法,当被调用时,它实际上执行另一个不同的方法,而不是我假设需要我修改的方法本身,方法指针指向的地方 说这个, public class A : OtherRandomClass { protected void SomeMethod() { //code } } public class B { public void OtherMethod() { //code th
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本身,我不想求助于交换方法体
我知道这有多糟糕,但我使用的框架非常愚蠢,我别无选择
有什么办法吗
编辑:找到了我要找的东西,感谢所有试图帮助我的人 这看起来并不简单,老实说,我从未尝试过做这样的事 我真的很想知道你的背景,因为如果你想做的是我的最后一个选择,我不会使用这个程序集 建议使用反射将加载的方法体(然后用中间语言编写)替换为您自己的方法体: 您可以使用MethodInfo.GetMethodBody().GetILAsByteArray(),修改 然后将其重新插入MethodBuilder.CreateMethodBody() 然后,您可以检查一下,大致了解应该如何实现这一切,但CreateMethodBody似乎没有得到完全支持,可能会出现一些意外的行为
总的来说,它相当复杂,看起来不值得麻烦。您控制的代码中是否有
SomeMethod
的所有调用站点,或者这也是不可修改的?另外,您的示例方法是实例方法,A
和B
似乎没有任何继承关系-在这样的调用过程中要从中变出的B
实例在哪里?是否有用?@Damien\u不相信的人无法真正控制调用SomeMethod的任何站点。A和B是完全独立的类,在继承方面互不相关。B
实例将在A
之后实例化。还有,@mjwills,我还需要进一步研究,但看起来不是这样。为什么?这里是百万美元的问题。为什么不自己调用另一个方法呢?@Clint我可以自己调用,但我关心的是调用的位置。不管怎样,我找到了我要找的。你说得对。我来试试看结果如何。