Csharp/C#教程:C#monkey修补 – 有可能吗?分享


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访问扩展方法。 见https://blogs.msdn.com/saveenr/archive/2008/11/14/consuming-extension-methods-in-ironpython.aspx

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

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

https://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这样做),因为它不安全。

上述就是C#学习教程:C#monkey修补 – 有可能吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/936219.html

(0)
上一篇 2021年11月6日
下一篇 2021年11月6日

精彩推荐