C# 如何在Silverlight中替换方法地址?
我正在使用以下方法替换C#桌面应用程序中的方法地址:C# 如何在Silverlight中替换方法地址?,c#,silverlight,reflection,aop,C#,Silverlight,Reflection,Aop,我正在使用以下方法替换C#桌面应用程序中的方法地址: var destMethod = typeof(BaseViewModel).GetMethod("desc"); var srcMethod = typeof(BaseViewModel).GetMethod("src"); *((uint*)new IntPtr(((int*)destMethod.MethodHandle.Value.ToPointer() + 2)).ToPointer()) = *((uint*)new IntPtr
var destMethod = typeof(BaseViewModel).GetMethod("desc");
var srcMethod = typeof(BaseViewModel).GetMethod("src");
*((uint*)new IntPtr(((int*)destMethod.MethodHandle.Value.ToPointer() + 2)).ToPointer()) = *((uint*)new IntPtr(((int*)srcMethod.MethodHandle.Value.ToPointer() + 2)).ToPointer());
在桌面应用程序中,地址被替换后,我调用“dest”方法:
“src”方法自动处理此调用
但在Silverlight中它不起作用,当我尝试调用“dest”方法时,就不会调用“src”方法
请告知此方法是否也可用于Silverlight,以及我应如何更改以使其生效。
提前感谢。“它不起作用”永远是不够的信息。到底发生了什么?你想达到什么目标?(“替换方法地址”并不是一个信息量很大的描述)对不起,我调整了帖子。在Silverlight中,我不能像在桌面应用程序中那样替换方法地址。因此,我希望实现运行时方法替换。现在还不清楚您为什么要这样做-看起来您最好使用一个可以有多个实现的接口,而不是对内部进行篡改。在我的情况下,这不是一个选项,我想在不更改当前代码的情况下拦截方法调用。我强烈怀疑你当时运气不好。我通常认为Silverlight更像是一个“锁定”的平台,所以我并不奇怪您在处理这样的内部构件时遇到问题。
var viewModel = new BaseViewModel();
viewModel.dest();