考虑一下即将到来的Iron Python实现。
理论上它会允许猴子修补,对吧?好或坏,都不重要。给定其他人的不可测试代码(至少很容易),dynamic 关键字将允许 monkey patching不会吗?如果我没看错的话,这对于 C# 和 VB 来说具有巨大的潜力。
对此有何想法?
最佳答案
.Net 4 中的动态类型支持并没有真正为您提供跨 CLR 类型系统的完整猴子修补支持。它为您提供了另一种模拟对象的方法,但坦率地说,当前的方法非常好(请参阅最小起订量:http://code.google.com/p/moq/)
使用动态类型,您会失去智能感知,因此可以提出一个论点,即不建议使用动态类型进行模拟。
IronPython 风格的拦截将允许您用自己想要的行为包装现有对象,但它不允许您告诉框架修补所有 Foo 对象(从此时开始),因此 Bar 方法将调用 Bar2而不是酒吧。
请记住,IronRuby 和 IronPython 有 2 个独立的类型系统在发挥作用,即底层 CLR 类型系统和 IronRuby/IronPython 类型系统,当它们调用 C# 代码时,会进行编码。因此,尽管 IronRuby/IronPython 可以正确地修补自己的类型系统,但它们不能使用相同的机制来修补 CLR 类型系统。
如果你想要猴子补丁,你需要适当的拦截,这很难:Dynamic interception of calls in .NET
关于由于猴子补丁的能力,.NET 4 可以实现更好的单元测试/模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1855242/