3

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

namespace IronPython.Runtime
{
    public class Bytes : IList<byte>, ICodeFormattable, IExpressionSerializable
    {
        internal byte[] _bytes;

        //I WANT TO INJECT THIS METHOD
        public byte[] getbytes()
        {
            return _bytes;
        }
    }
}

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

4

3 回答 3

1

这可以使用诸如TypeMock之类的框架来完成,它与框架分析 API 挂钩。

然而,这种注入通常仅用于促进单元测试,而不是在生产代码中使用,并且会影响性​​能。我的观点是,如果你不得不在单元测试之外做一些如此激烈的事情,那么你可能做错了什么。

于 2010-05-18T21:45:57.587 回答
1

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

于 2010-05-21T02:06:16.417 回答
0

我不相信现有的 .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 允许),因为它不安全。

于 2010-05-18T15:11:28.917 回答