所以我对它的实现方式感兴趣。 基本上:我怎样才能自己重新实现同样的事情? ......我不打算这样做。只是了解。
基本问题是: 怎么可能(?)拦截类实例化呢? 如何在一个案例中用一个实现替换它,在另一个案例中用它的原始或甚至不同的实现来替换它?
如何拦截静态方法或密封类。
这完全是关于垫片/痣,而不是关于存根。
答案 0 :(得分:6)
这是通过更改编译器发出的公共中间语言(IL)代码来完成的。您可以使用Fody库进行预打包的IL修改。 Fody内部使用mono.cecil库进行低级IL操作。修改编译器生成的IL并将其作为程序集保存到磁盘。
我在Moles [pdf文件]上找到了此参考出版物。第4节解释了代码检测的机制。