3

ロード時に別のアセンブリからクラスにメソッドを挿入する C# アセンブリを作成することは可能ですか? はいの場合、注入されたメソッドは、IronPython などの DLR を使用する言語から利用できますか?

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

IronPython から拡張メソッドにアクセスできます。http://blogs.msdn.com/saveenr/archive/2008/11/14/using-extension-methods-in-ironpython.aspxを参照してください。

于 2010-05-21T02:06:16.417 に答える
1

これは、フレームワーク プロファイリング API にフックするTypeMockなどのフレームワークで実行できます。

ただし、この種のインジェクションは通常、製品コード内ではなく単体テストを容易にするためにのみ使用され、パフォーマンス ヒットを伴います。私の意見では、単体テスト以外でこれほど抜本的なことをしなければならない場合、おそらく何か間違ったことをしているでしょうか。

于 2010-05-18T21:45:57.587 に答える
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 に答える