有可能通过反思来做到以下几点吗?不需要反思。任何方法都可以接受。
我有两个程序集,VenderAssembly(我没有源代码)和MyAssembly。我想在调用MyAssembly.MyMethod
时调用VenderAssembly.VendorMethod
,其中MyAssembly不是负责调用VenderMethod
的程序集。
我不需要访问传递给VendorMethod
的参数值。我只需要在每次调用MyMethod
时触发VendorMethod
。
答案 0 :(得分:3)
您无法动态地调用方法'当另一个人被召唤时。
您无法注册方法,只能注册事件。因此,除非VendorMethod()
调用事件VendorMethodCalled
,you can subscribe,否则无法调用。
答案 1 :(得分:2)
Ziad Elmalki撰写了a description of how to replace a method implementation at runtime和published code。
看来该技术的关键部分是要求JIT编译一个与要替换的签名具有相同签名的方法,然后覆盖该类型的方法表(vtbl的托管版本)以引用新方法。
替换将是无条件的,如果你想测试调用是否来自程序集外部,你需要进行堆栈遍历(.NET使这相当容易)。
当然,这将无法替换足够小的方法让JIT选择内联它们。