C#monkey修补 – 有可能吗?

是否可以编写一个C#程序集,在加载时会将方法从另一个程序集注入一个类? 如果是,注入的方法是否可以使用DLR的语言,如IronPython?

namespace IronPython.Runtime { public class Bytes : IList, ICodeFormattable, IExpressionSerializable { internal byte[] _bytes; //I WANT TO INJECT THIS METHOD public byte[] getbytes() { return _bytes; } } } 

我需要这种方法,如果可能的话我想避免重新编译IronPython。

这可以通过诸如TypeMock之类的框架来完成,它可以挂钩到框架分析API中。

然而,这种注入通常仅用于促进unit testing,而不是用于生产代码,并且具有性能损失。 我的观点是,如果你不得不做一些像unit testing那样激烈的事情,那么你可能做错了什么。

可以从IronPython访问扩展方法。 见http://blogs.msdn.com/saveenr/archive/2008/11/14/consuming-extension-methods-in-ironpython.aspx

您可以使用reflection将此方法转换为另一个程序集

我不知道IronPython但我认为这会对你有所帮助

http://www.voidspace.org.uk/ironpython/dynamically_compiling.shtml

我不相信一旦创建它就可以扩展现有的.NET类型。

如果您只需要一个byte[] (在IronPython中,我猜),您可以:

 >>> import clr >>> import System >>> b = bytes([1, 2, 3, 4]) >>> a = System.Array[bytes](b) >>> a Array[bytes]((b'\x01', b'\x02', b'\x03', b'\x04')) 

但是,IronPython不太可能允许访问Bytes的底层存储(除非CPython这样做),因为它不安全。